在hibernate envers中,我可以使用以下代码获取对实体所做的所有更改:
AuditQuery aq = auditReader.createQuery().forRevisionsOfEntityWithChanges(DummyEntity.class, false);
但有没有办法让特定用户对所有实体进行所有更改?
我正在使用以下实体来存储修订信息:
@RevisionEntity(UserRevisionListener.class)
@Entity(name = "env_audit_envers_info")
public class AuditEnversInfo extends DefaultRevisionEntity {
private static final long serialVersionUID = -7604731515258123883L;
@Column(name = "user_id")
private String userId;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
}
并且使用以下侦听器将对每个更改添加此模型的条目:
public class UserRevisionListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
AuditEnversInfo auditEnversInfo = (AuditEnversInfo) revisionEntity;
Optional<Authentication> auth = Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication());
String username = auth.isPresent() ? auth.get().getName() : "[email protected]";
auditEnversInfo.setUserId(username);
}
}
AuditEntity#revisionProperty
方法是您正在寻找的:
List results = auditReader.createQuery()
.forRevisionsOfEntityWithChanges( DummyEntity.class, false )
.add( AuditEntity.revisionProperty( "userId" ).eq( userId ) )
.getResultList();
添加了#revisionProperty
方法,以允许在审计域模型中扩展或使用自定义修订实体实例的用户能够添加限制/投影,或者能够根据该模型上的字段对结果进行排序。