是否可以向Hibernate Envers的实体请求审核表的名称?我的意思不是要获得实体的冬眠表名和附加审核后的解决方案。
在Hibernate Envers 5.x中,没有集中式的方法来获取此信息,因此您必须咨询几个API才能获得此元数据。但是有HHHH-122014和HHH-122044突出了需要暴露此信息的需求,以便更轻松地用户代码消耗它。
为了访问此信息,我们需要首先获得仅通过SessionImplementor
接口可用的SPI。
我必须强调这种方法可能会随着每个版本而发生变化,因为其中一些使用内部类和方法,而这些内部类和方法不受次要和bugfix发行的兼容性限制。。
。使用JPA
SessionImplementor si = entityManager.unwrap( SessionImplementor.class );
使用本机Hibernate
SessionImplementor si = (SessionImplementor) session;
拥有SessionImplementor
后,我们需要访问一些内部对象:
// Get the envers service, this is the central "holder" for envers in 5.x
EnversService enversService = si.getSessionFactory()
.getServiceRegistry()
.getService( EnversService.class );
// Next we get the audit entity configuration and get the audited entity name
AuditEntitiesConfiguration aec = enversService.getAuditEntitiesConfiguration();
String auditEntityName = aec.getAuditEntityName( yourEntityName );
// Now we need to get the entity information from ORM
EntityPersister persister = si.getSessionFactory().getEntityPersister( auditEntityName )
String tableName = ( (Queryable) persister ).getTableName();