【发布时间】:2015-03-17 15:56:39
【问题描述】:
我需要根据 Envers 提供的日志信息生成报告(表格),以向用户显示对象的更改列表。像这样(以用户实体为例):
Id | field | old_value | new_value
1 | display_name | Boby77 | Boby
1 | display_name | Boby | Bob
1 | age | 21 | 22
我找到的方法如下:
- 获取对象类型和 ID 并使用方法 AuditReader.getResivions()。这将获取该对象的修订列表(仅限数字)。
- 通过调用 AuditReader.find(User.class, 1L, i) 遍历修订列表并获取对象的旧版本,并将所有这些对象放入名为 revObjects 的映射中。
- 迭代以比较对象属性(修订之间)以查找属性更改,因此我可以获得旧值和新值。
这会起作用,但是,我认为它执行了太多查询,因为我认为,每个 AuditReader.find() 操作都会对数据库执行至少 1 个查询。 如果我可以在一个查询中获取所有对象版本,那就太好了,比如 .getRevisionsWithObjects()。
我查看了 AuditQuery 类,希望找到一些解决方案,发现该类仅在修订范围内有效,我的意思是,所有受支持的查询仅在给定修订上运行。
有人知道如何在一个查询中获取一组修订和修订对象吗?
任何建议都有帮助,谢谢
【问题讨论】:
-
你有没有为此想出任何解决方案?
标签: hibernate-envers