2014-09-05 106 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>