Spring boot 使用Hibernate Envers从实体获取原始值
我已经在我的Springboot项目中配置了Hibernate Envers,现在它正在保存我用@Audited注释的实体中的每个更改,但我有一个疑问Spring boot 使用Hibernate Envers从实体获取原始值,spring-boot,hibernate-envers,Spring Boot,Hibernate Envers,我已经在我的Springboot项目中配置了Hibernate Envers,现在它正在保存我用@Audited注释的实体中的每个更改,但我有一个疑问 在第一次更改完成后,Envers存储实体的修订,在一次更改后,我将新值存储在实体表和_AUD表中。接下来的更改存储在_AUD表中,因此我知道第一次更新后更改了什么,但原始值(第一次更改之前的值)丢失了。我错过什么了吗?有没有办法在更改完成之前保存这些值(因为我已经在实体表中有了最后的值)?。环境管理员跟踪了三种不同的修订类型: 添加(REVTY
在第一次更改完成后,Envers存储实体的修订,在一次更改后,我将新值存储在实体表和_AUD表中。接下来的更改存储在_AUD表中,因此我知道第一次更新后更改了什么,但原始值(第一次更改之前的值)丢失了。我错过什么了吗?有没有办法在更改完成之前保存这些值(因为我已经在实体表中有了最后的值)?。环境管理员跟踪了三种不同的修订类型:
- 添加(REVTYPE=0)-插入
- MOD(REVTYPE=1)-更新
- DEL(REVTYPE=2)-删除
REVTYPE
条目添加到审核表中
如果在Hibernate的有状态会话范围之外操作某个条目,Envers将不知道该更改,并且相应的条目也不会添加到审核表中。根据注释,这就是为什么您没有看到REVTYPE=0
(又称INSERT
)操作的原因
在这种情况下,,您需要确保增加修订号序列,并通过插入行的脚本或批处理过程手动添加适当的条目,以确保Envers架构对实体的历史具有完整的可见性。您的AUD表中是否有
REVTYPE=0
或它们都是REVTYPE=1
还是REVTYPE=2
?@Naros只有1和2,所以。。。看起来Envers没有审核创建,是吗?是的。如何将记录插入表中以开始?该记录是偶然保存在集合中的实体吗?@Naros我发现了问题。有一个进程在数据库中插入行,而Envers似乎不知道这一点,因此它不会审核这些操作。谢谢你给我指明了正确的方向。