2014-09-05 73 views
2

我们正在尝试从Spring3/Hibernate3升级到Spring4/Hibenate4。我们看到的其中一个问题是,在Hibernate3中,当实体从服务层以服务方法周围的事务边界获取时,实体没有用于延迟加载属性的活动打开会话。事务管理器用于调用SpringSessionSynchronization的afterCompletion来取消所有会话。如何关闭事务边界后的休眠会话

现在使用spring4 + hibernate4组合,我们看到实体回来时会在其上启动活动的打开会话。事务管理器现在调用SpringFlushSynchronization而不是SpringSessionSynchronization,它在执行提交后不会执行任何操作。那么现在情况是,当与旧的会话实体被传递到另一个服务电话与一个单独的事务边界,它是由错误满足:

Illegal attempt to associate a collection with two open sessions 

注意,事务管理器在我的情况下,使用JTA如果这是相关的。 Spring现在的工作方式有什么变化,正在产生这种行为上的变化 - 是否有解决问题的补救措施?

+0

您使用哪个版本的bitronix? bitronix/sprng/hibernate4/5有问题吗? – rdm 2016-04-26 20:35:25

回答

1

我的问题是我没有设置JTATransactionFactory。添加到休眠配置解决了我的问题:

  <prop key="hibernate.current_session_context_class">jta</prop> 
      <prop key="hibernate.transaction.jta.platform">org.hibernate.engine.transaction.jta.platform.internal.BitronixJtaPlatform</prop> 
      <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>