0

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

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

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

有没有办法对 Envers 进行某种尝试/捕获,这样如果出现这种错误,它不会破坏主进程?

附言

我还使用测试数据库自动创建审计表,但它在设定的时间或调用时运行。如果我忘记调用脚本或表的测试数据库更新失败,我仍然希望通过某种方式检查错误并绕过审计。

4

1 回答 1

0

此错误至关重要,因为它会因审计中断而中断更新/插入/删除实体的过程。

这就是这里的重点。

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

在 Hibernate 6 中,我们实际上正在考虑引入分类 HBM2DDL 控件,您可以在其中设置none主实体表并update用于 Envers,这完全避免了您完全面临的这个问题,因为 Envers 背后的要点是隐藏表.

现在,您可以简单地将 hbm2ddl.auto 配置属性设置validate为至少在您的进程早期报告问题,而不是在运行时(如果缺少表)。

于 2019-11-25T18:13:47.203 回答