【问题标题】:Hibernate PostInsertEventListeners -Use Same Transaction as insert?Hibernate PostInsertEventListeners - 使用与插入相同的事务?
【发布时间】:2010-03-04 00:22:51
【问题描述】:

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

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

我听说你可以使用javax.transaction.Syncronization 和Hibernate 的transaction.registerSyncronization() 方法来做到这一点,但我找不到任何使用示例。

感谢任何帮助。

【问题讨论】:

    标签: java hibernate transactions


    【解决方案1】:

    我认为这是不可能的。

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多