Hibernate监听器在单独的事务中执行

时间:2013-10-28 22:56:49

标签: java spring hibernate transactions

在我们的应用程序中,我们注册了PostDeleteEventListener,为每个已删除的拥有实体执行,并且可能为相关实体执行(如果启用了级联删除)。 侦听器用于检查每个实体是否存在某个属性,该属性表示位于一个大型集中表中且没有外键关系的实体的ID。 发现的ID存储在由java.util.Set持有的ThreadLocal中。

我们正在寻找的是一些'事务挂钩'来触发一个删除声明(出于性能原因),java.util.Set持有所有ID。

我们试图通过使用在@Transactional方法运行后执行的Spring方面来实现此目的。然后,方面可以触发delete语句并清除java.util.Set。 不幸的是,似乎PostDeleteEventListener在触发方面后执行。换句话说,它在一个单独的事务中执行,我可以通过在调试时检查堆栈跟踪来清楚地看到它。所以有一个方面看起来没有办法......

另一个选项似乎有第二个侦听器(FlushEventListener)在刷新会话时执行。 虽然这有效,但我们不知道这是否是一个好的解决方案?

我们可以使用其他(和更好的)替代品来解决这个问题吗? 是否有其他方式(Spring或Hibernate)在事务提交之前得到通知?

0 个答案:

没有答案