使用 Hibernate Envers 从实体获取原始值

Get original values from entity with Hibernate Envers

我已经在我的 Springboot 项目中配置了 Hibernate Envers,现在它正在保存我用 [=14 注释的实体中的每个更改=]@Audited 但是,我有疑问。

Envers 存储实体的修订 第一次更改完成后,在一次更改后我将新值存储在实体 table 和_澳元 table。接下来的更改存储在 _AUD table 中,因此我知道第一次更新后发生了什么变化,但原始值( 第一次更改之前的值)丢失了。我错过了什么吗?有没有办法在更改完成之前保存值(因为我已经在实体table中有了最后一个值)?

Envers 跟踪三种不同的修订类型:

  • 添加(REVTYPE=0)- 插入
  • MOD (REVTYPE=1) - 更新
  • 删除(REVTYPE=2)-删除

这意味着如果 Hibernate 通过有状态会话插入、更新和删除条目,Envers 将拾取这些更改并将适当的 REVTYPE 条目添加到审核 table。

如果一个条目在 Hibernate 的有状态会话范围之外被操作,Envers 将不知道该更改并且相应的条目将不会添加到审计中 table。根据评论,这就是为什么您看不到 REVTYPE=0(又名 INSERT)操作的原因。

对于这种情况,您需要确保递增修订号序列并通过脚本或插入行的批处理手动添加适当的条目,以确保 Envers 模式具有实体历史的完整可见性。