Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate PostInsertEventListeners-使用与插入相同的事务?_Java_Hibernate_Transactions - Fatal编程技术网

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

Java Hibernate PostInsertEventListeners-使用与插入相同的事务?,java,hibernate,transactions,Java,Hibernate,Transactions,我有一些hibernate代码,它执行对数据库的插入,插入完成后会触发一个定制的PostInsertEventListener。(本质上是确保其他记录得到适当更新的触发器) 我需要做的是让EventListener中的代码使用与原始插入相同的事务,这样,如果插入没有成功提交,EventListener就不会启动 我听说您可以使用javax.transaction.Syncronization和Hibernate的transaction.registerSyncronization()方法来实现这

我有一些hibernate代码,它执行对数据库的插入,插入完成后会触发一个定制的PostInsertEventListener。(本质上是确保其他记录得到适当更新的触发器)

我需要做的是让EventListener中的代码使用与原始插入相同的事务,这样,如果插入没有成功提交,EventListener就不会启动

我听说您可以使用
javax.transaction.Syncronization
和Hibernate的
transaction.registerSyncronization()
方法来实现这一点,但我在任何地方都找不到使用示例


非常感谢您的帮助。

我认为这是不可能的

如果我理解的话,您只想在事务成功完成(提交)的情况下执行一些代码。但是,如果事务已提交,则无法在同一事务中执行其他操作,因为它已结束

但是,您可以使用在事务中调用的PreInsertEventListener(在提交之前)。如果事务失败,事件侦听器将触发事件(因为在提交之前我们不知道事务是否会成功),但是如果事务失败,您在侦听器中修改的任何内容都不会存储在数据库中。检查侦听器列表

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