0

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

我们正在寻找的是一些“事务挂钩”来触发一个删除语句(出于性能原因),所有 ID 都由java.util.Set.

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

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

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

4

0 回答 0