如何在Envers中捕获错误?

时间:2019-11-22 18:59:00

标签: spring spring-boot hibernate-envers spring-data-envers

我将表格的自动更新设置为无

spring.jpa.properties.hibernate.hbm2ddl.auto=none

这样,当我运行Envers时,我将不得不自己创建审核表。但是,当我将一个实体设置为使用@Audited批注进行审核并且没有为该实体创建审核表时,我遇到了一个错误,因为Envers然后尝试填充不存在的审核表。该错误至关重要,因为由于审核中断,它会中断更新/插入/删除实体的过程。

是否有某种方法可以对Envers进行尝试/捕获,以便在出现这种错误时不会破坏主过程?

P.S。

我还使用测试数据库自动创建审核表,但是它在设定的时间或在调用时运行。我仍然想以某种方式检查错误,并以某种方式绕过审核,以防万一我忘记调用脚本或表的测试数据库更新失败时出现错误。

1 个答案:

答案 0 :(得分:0)

  

此错误至关重要,因为由于审核中断,它随后中断了更新/插入/删除实体的过程。

这就是重点。

定义定义为@Audited的实体时,您已指定要跟踪对该实体的更改,因此,如果由于缺少表或列而无法跟踪此类更改,则事务将回滚以保持一致性审计表和主实体表之间的状态。

在Hibernate 6中,实际上我们正在考虑引入分类的HBM2DDL控件,您可以在其中为主要实体表设置none并为Envers使用update,这完全避免了此问题因为Envers背后的重点是阴影主表,所以完全可以面对。

现在,您只需将hbm2ddl.auto配置属性设置为validate,以至少在过程中较早地报告问题,而不是在缺少表的情况下在运行时报告问题。