首页 文章

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

提问于
浏览
1

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

第一次更改完成后,Envers会存储实体的修订版,因此,在一次更改后,我将新值存储在实体表和_AUD表中 . 下一个更改存储在_AUD表中,因此我知道在第一次更新后更改了但原始值(第一次更改之前的值)丢失了 . 我错过了什么吗?有没有办法在更改完成之前保存值(因为我已经拥有实体表中的最后一个值)?

1 回答

  • 2

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

    • ADD(REVTYPE = 0) - 插入

    • MOD(REVTYPE = 1) - 更新

    • DEL(REVTYPE = 2) - 删除

    这意味着如果Hibernate通过有状态会话插入,更新和删除条目,Envers将获取这些更改并将相应的 REVTYPE 条目添加到审计表中 .

    如果在Hibernate 's stateful session, Envers won'范围之外操作条目,则知道该更改并且相应的条目赢得了 REVTYPE=0 (也就是 INSERT )操作 .

    对于这种情况,您需要确保增加修订号序列并通过插入行的脚本或批处理手动添加相应的条目,以保证Envers架构完全可见实体的历史 .

相关问题