假设我们有一个经过审核的实体,例如:
@Entity
@Audited
public class Person {
@Id
private Long id;
private String name;
}
并且在存储/更新几百条记录之后,我需要在给定一组id
s的情况下获取最新的修改实体。给定Envers表逻辑,它将如下所示:
SELECT MAX(R.REVTSTMP) FROM PERSON_AUD P JOIN REVINFO R ON P.REV = R.REV
WHERE P.ID IN (12, 35, 143, 151, 165, 188, 234, 251);
但我找不到通过JPA或Envers API获取此信息的方法。请注意,我正在寻找一种“Enver的方式”来做到这一点,试图避免使用本机SQL(加上审计表存储在与实体的单独的目录中)。
答案 0 :(得分:0)
您可以通过AuditQuery
扩展程序完成此操作:
Object[] results = (Object[]) AuditReaderFactory.get( entityManager )
.createQuery()
.forRevisionsOfEntity( YourEntity.class, false, false )
.add( AuditEntity.revisionNumber().in( idsList ) )
.addOrder( AuditEntity.revisionNumber().desc() )
.setMaxResults( 1 )
.getSingleResult();
// Object[0] = YourEntity instance
// Object[1] = The RevisionEntity instance
// Object[2] = RevisionType enum value
我们目前不会公开AuditEntity.revisionTimestamp()
属性访问者,因此您必须直接从Object[1]
修订版实体实例中获取值。