Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 使用Hibernate Envers从实体获取原始值_Spring Boot_Hibernate Envers - Fatal编程技术网

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

Spring boot 使用Hibernate Envers从实体获取原始值,spring-boot,hibernate-envers,Spring Boot,Hibernate Envers,我已经在我的Springboot项目中配置了Hibernate Envers,现在它正在保存我用@Audited注释的实体中的每个更改,但我有一个疑问 在第一次更改完成后,Envers存储实体的修订,在一次更改后,我将新值存储在实体表和_AUD表中。接下来的更改存储在_AUD表中,因此我知道第一次更新后更改了什么,但原始值(第一次更改之前的值)丢失了。我错过什么了吗?有没有办法在更改完成之前保存这些值(因为我已经在实体表中有了最后的值)?。环境管理员跟踪了三种不同的修订类型: 添加(REVTY

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


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

环境管理员跟踪了三种不同的修订类型:

  • 添加(REVTYPE=0)-插入
  • MOD(REVTYPE=1)-更新
  • DEL(REVTYPE=2)-删除
这意味着,如果Hibernate通过有状态会话插入、更新和删除条目,Envers将拾取这些更改并将相应的
REVTYPE
条目添加到审核表中

如果在Hibernate的有状态会话范围之外操作某个条目,Envers将不知道该更改,并且相应的条目也不会添加到审核表中。根据注释,这就是为什么您没有看到
REVTYPE=0
(又称
INSERT
)操作的原因


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

您的AUD表中是否有
REVTYPE=0
或它们都是
REVTYPE=1
还是
REVTYPE=2
?@Naros只有1和2,所以。。。看起来Envers没有审核创建,是吗?是的。如何将记录插入表中以开始?该记录是偶然保存在集合中的实体吗?@Naros我发现了问题。有一个进程在数据库中插入行,而Envers似乎不知道这一点,因此它不会审核这些操作。谢谢你给我指明了正确的方向。