使用Hibernate Envers进行审核:当ID不是' id'时如何查询

时间:2016-07-20 18:33:41

标签: mysql spring hibernate jpa hibernate-envers

使用Hibernate Envers,您可以创建一个相应的审核表,后缀为" _AUD"对于每个JPA实体,然后您可以使用AuditReader进行查询。

此AuditReader假定实体的ID为 id ,并且它具有 getId() getter。就我而言,我的所有实体都有不同的名称标识符,如 userId accountId 等...所有数据类型都不同。

如何创建一个模式来减少样板代码,以便在不知道id的fieldName的情况下通过id检索审计历史数据?

2 个答案:

答案 0 :(得分:0)

这就是AuditEntity.id()的用途:)

AuditQuery query = getAuditReader()
    .forRevisionsOfEntity( MyEntity.class. true, false )
    .add( AuditEntity.id().eq( myEntityClassId ) );

您不应该知道属性映射到您实体的标识符属性,因为Envers将处理类型之间所有必要的相等/不等式检查以及幕后的属性映射

答案 1 :(得分:0)

怎么样?

getAuditReader().createQuery().forRevisionsOfEntity(MyEntity.class, false, false).add( AuditEntity.property("accountId").eq(12));