Hibernate PostInsertEventListeners - 使用与插入相同的事务?

时间:2010-03-04 00:22:51

标签: java hibernate transactions

我有一些hibernate代码执行插入数据库,并在完成该插入后触发自定义的PostInsertEventListener。 (基本上是确保其他记录得到适当更新的触发器)

我需要做的是使EventListener中的代码使用与原始插入相同的事务,这样如果插入未成功提交,则不会触发EventListener。

我听说您可以使用javax.transaction.Syncronization和Hibernate的transaction.registerSyncronization()方法来执行此操作,但我找不到任何可以使用的示例。

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我不认为这是可能的。

如果我理解,你只想在事务成功完成(被提交)时执行一些代码。但是,如果事务被提交,则在结束时不能在同一事务中执行其他操作。

然而,您可以使用在事务中(在提交之前)调用的PreInsertEventListener。如果事务失败,事件侦听器将触发事件(因为如果事务成功,我们直到提交才知道),但是如果事务失败,则在侦听器中修改的任何内容都不会存储在数据库中。检查https://www.hibernate.org/hib_docs/v3/api/org/hibernate/event/EventListeners.html以获取侦听器列表。

虽然有一个警告。您不应该在侦听器中进行太多的数据修改。特别是,您不应该触发任何延迟加载的集合。