我将表格的自动更新设置为无
spring.jpa.properties.hibernate.hbm2ddl.auto=none
这样,当我运行Envers时,我将不得不自己创建审核表。但是,当我将一个实体设置为使用@Audited批注进行审核并且没有为该实体创建审核表时,我遇到了一个错误,因为Envers然后尝试填充不存在的审核表。该错误至关重要,因为由于审核中断,它会中断更新/插入/删除实体的过程。
是否有某种方法可以对Envers进行尝试/捕获,以便在出现这种错误时不会破坏主过程?
P.S。
我还使用测试数据库自动创建审核表,但是它在设定的时间或在调用时运行。我仍然想以某种方式检查错误,并以某种方式绕过审核,以防万一我忘记调用脚本或表的测试数据库更新失败时出现错误。
答案 0 :(得分:0)
此错误至关重要,因为由于审核中断,它随后中断了更新/插入/删除实体的过程。
这就是重点。
定义定义为@Audited
的实体时,您已指定要跟踪对该实体的更改,因此,如果由于缺少表或列而无法跟踪此类更改,则事务将回滚以保持一致性审计表和主实体表之间的状态。
在Hibernate 6中,实际上我们正在考虑引入分类的HBM2DDL控件,您可以在其中为主要实体表设置none
并为Envers使用update
,这完全避免了此问题因为Envers背后的重点是阴影主表,所以完全可以面对。
现在,您只需将hbm2ddl.auto配置属性设置为validate
,以至少在过程中较早地报告问题,而不是在缺少表的情况下在运行时报告问题。