使用Hibernate Envers进行审计

时间:2017-11-06 12:35:43

标签: java spring hibernate hibernate-envers

我正在使用hibernate envers来创建我的数据历史记录,它的工作正常。这里的问题是,它在历史表中创建重复数据,即在历史表中创建数据是否在审计表中有任何变化。我只想更改存储在历史记录表中的字段。我是hibernate envers的新手。我该怎么办?

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,Envers就不会这样,至少不是开箱即用的。

Envers是一种提交快照审核解决方案,在提交之前,它会检查审核实体状态并确定是否已修改任何属性,并在该时间点记录该实体的所有审核字段的快照。这意味着没有创建审计条目的唯一时间是没有修改任何属性。

但它也使用快照方法,因为它非常适合查询API。

考虑如果在给定修订中查找实体的查询必须从该修订中读取所有行回到开始时间,迭代每一行并合并捕获的列状态以仅实例化单行,则会出现效率低下的情况结果集。

使用 snapshot 方法,它归结为以下查询,没有循环或迭代工作。

SELECT e FROM AuditedEntity e WHERE e.revisionNumber = :revisionNumber

从I / O角度来看,无论是数据库读取数据页还是网络流式传输单行结果集而不是多行结果集到客户端,这都会更有效。

我会说在这种情况下,当你将应用程序与其他任何方式执行的成本和低效率进行比较时,“空间便宜”的说法确实成立。

如果这是您希望Envers支持的内容,可能是通过一些用户配置的策略,那么欢迎您在JIRA中为hibernate-envers记录新的功能请求,我可以看看在其可行性。

答案 1 :(得分:0)

我遇到了类似的问题。

就我而言,错误是审计字段的精度高于数据库字段。请参阅我对另一个主题的回复:https://stackoverflow.com/a/65844949/13381019