Hibernate Envers - 获取已更改的字段

Posted

技术标签:

【中文标题】Hibernate Envers - 获取已更改的字段【英文标题】:Hibernate Envers - Get Fields that have changed 【发布时间】:2012-12-17 00:39:14 【问题描述】:

我正在尝试审核一个相当复杂的数据库结构。目前我正在运行Envers,它会审核对每个对象所做的更改。这真的很好用!

我现在想在 UI 上显示一些审核信息。对象/表变得相当复杂,所以我一直在寻找一种方法来查看审计中哪些字段发生了变化。目前Envers 存储每个对象的快照,其中标记有修订ID。我可以查看每个对象的修订版,然后手动查询以查看发生了哪些更改,但我想知道是否有办法让Envers 存储哪些字段已更改。这可能吗?我找到了 2011 年的 this 链接,它建议手动检查每个对象字段。我关心的是速度。我有很多相关的对象,我可能只有一个更新的字段。我必须查询很多字段才能找到已更改的字段。

是否可以存储已更改的字段?

谢谢

编辑

我应该说我使用的是 REVCHANGES 表,所以我可以看到在哪些修订版本中发生了什么变化,但这只是在实体级别而不是字段级别

【问题讨论】:

为此 +1 - 我们目前正在使用旧的 onPostUpdate 侦听器进行差异,并在进行更新时将差异记录在表中。理想情况下,Envers 查询会告诉我们:1. 发生了什么变化并获得额外奖励:2. 发生了什么变化 【参考方案1】:

在较新的 Envers 版本中,您可以使用布尔标志跟踪每次修订时更改了哪些属性。见:

http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html#envers-tracking-properties-changes

【讨论】:

这个问题是,据我所知,没有办法以编程方式检查这些信息。您只能在审计查询中使用它。这有助于限制您引入的修订,但根本没有帮助合理地显示发生的事情的日志。如果我正确理解原始海报,并且对于我自己的问题,我需要一种在加载修订后访问这些标志的方法,以便我可以明智地向用户展示发生了什么变化。否则日志是无用的,因为要弄清楚发生了什么变化需要很长时间。

以上是关于Hibernate Envers - 获取已更改的字段的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate-Envers:审计动态组件

Hibernate Envers 如何通过 EmbeddedId 的属性获取修订

Hibernate Envers:初始化 Envers 代理

审计:对子修改的父实体修订(Javers/Envers/... + Hibernate)

Hibernate Envers 修改了标志行为

Hibernate Envers - 获取日期之间的修订和对象