从Hibernate Envers获取审核表名称



是否可以向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();

相关内容

  • 没有找到相关文章

最新更新