如何捕捉 Envers 中的错误?

How to catch errors in Envers?

我已将 table 的自动更新设置为 none

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

那样的话,当我 运行ning Envers 时,我将不得不自己创建审计 table。但是,当我使用 @Audited 注释设置要审计的实体并且我没有为该实体创建审计 table 时,我 运行 陷入错误,因为 Envers 然后尝试填充审计 table 不存在。这个错误很关键,因为它会因为审核中断而中断 updating/inserting/deleting 实体的进程。

有没有什么办法可以为 Envers 提供某种 try/catch,这样即使出现此类错误也不会破坏主进程?

P.S.

我也在使用测试数据库自动创建审计 tables,但它 运行s 在设定时间或调用时创建。我仍然想要一些方法来检查错误,并在出现错误时绕过审计,以防我忘记调用脚本或 tables 的测试数据库更新失败。

This error is crucial because it then breaks the process of updating/inserting/deleting the entity because of the audit breaking.

这就是重点。

定义与 @Audited 映射的实体时,您已指定要跟踪对该实体的更改,因此如果由于缺少 table 或列而无法跟踪此类更改,事务将回滚以保持审计 table 与主要实体 table.

之间的一致性状态

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

现在,您可以简单地将 hbm2ddl.auto 配置 属性 设置为 validate,如果 table不见了。