我们曾经使用 Hibernate 拦截器拦截了
afterTransactionCommit
并检查事务是否已提交 (wasCommited()
),但我们最近升级到了 Hibernate 5.0.7.Final,而 hibernate 5 不再支持此调用。当我们调用 getStatus()
函数时,无论事务状态如何,我们似乎只会得到 ACTIVE
或 NOT_ACTIVE
。
我查看了 afterTransactionBegin
,事务被标记为 ACTIVE
,这是预期的,在 beforeTransactionCompletion
中它仍然被标记为 ACTIVE
,这也是预期的,但是在 afterTransactionCommit
中它被标记为 NOT_ACTIVE
,这对我来说没有意义。我本应该期望其中之一是 COMMITTED、ROLLED_BACK、FAILED_COMMIT
。无论事务状态如何,即使我抛出导致回滚的异常,我仍然只能看到 NOT_ACTIVE
。
我们寻找这些信息的原因是为了确定是否需要将一些消息发布到队列中。基本上,如果事务未提交,则不要发布。目前在 Hibernate 5 中,我似乎找不到以编程方式确定事务是否成功的方法。
afterTransactionCompletion
会看到未发生的提交。 - vnov