我需要根据Envers提供的日志信息生成报告(表格),以向用户显示对象的更改列表。像这样的东西(以用户实体为例):
Id | field | old_value | new_value
1 | display_name | Boby77 | Boby
1 | display_name | Boby | Bob
1 | age | 21 | 22
我找到的方式如下:
这将有效,但是,我认为它做了太多查询,因为我认为,每个AuditReader.find()操作都将作为数据库的至少1个查询执行。 如果我可以在一个查询中获取所有对象版本,例如.getRevisionsWithObjects(),那将是非常好的。
我查看了AuditQuery类,希望找到一些解决方案,并发现此类仅适用于修订的范围,我的意思是,所有支持的查询仅在给定的修订版上运行。
有人知道如何在一个查询中获取一组修订和修订对象吗?
任何建议都有帮助,谢谢
答案 0 :(得分:0)
以下是我查询单个实体的审核历史记录的方法。 AuditHistory类是一个包装器,它将我的自定义RevisionEntity和被审计的实体集合在一起。
List<AuditHistory<T>> auditHistoryList = new ArrayList<AuditHistory<T>>();
AuditQuery auditQuery = getAuditReader().createQuery().forRevisionsOfEntity(getEntityClass(), false, false).add(AuditEntity.id().eq(entity.getId()));
for (Object queryResults: auditQuery.getResultList()) {
auditHistoryList.add(new AuditHistory<T>((Object[])queryResults));
};
return auditHistoryList;
答案 1 :(得分:0)
对于任何绊倒此线程的人,ENVERs只能通过下面的第一个布尔值检索历史实体(没有元数据)(请注意&#34; true&#34;值)。
AuditQuery auditQuery = getAuditReader()
.createQuery()
.forRevisionsOfEntity(getEntityClass(), true, false)
.add(AuditEntity.id().eq(entity.getId()));
return auditQuery.getResultList();