2013-03-25 120 views
5

我剛剛得到了Hibernate Session和Connection之間的關係。 但現在,我得到另一個問題:hibernate sessionfactory如何管理會話? 在下面的代碼段:保存()一個DAO類的方法:hibernate sessionfactory如何管理會話?

Session session = sessionFactory.openSession(); 
    Transaction tx=null; 
    tx=session.beginTransaction(); 
    session.save(transientInstance); 
    session.flush(); 
    tx.commit(); 

當我們調用sessionFactory.openSession(),它會創建一個附加到當前線程(通過ThreadLocal的)一個新的會話,該會話也附到JDBC連接, 但是,正如您所看到的,我們不需要關閉會話(session.close()),也不需要連接。 那麼,什麼是Hibernate會話的生命週期,在什麼情況下它會被關閉?自動?

回答

9

我推薦的getCurrentSession方法,因爲只有用這種方法你必須要確保的可能性,本次會議將從休眠

Configuration J2EE Current Session.

如果使用openSession方法被關閉,你必須關閉會話由你自己。 在我開始使用hibernate之後,我認爲它不重要,因爲所有會話都會自動關閉......我錯了。 我發現SessionStatistics從休眠狀態 SessionStatistics 發現打開的會話已經打開,永遠不會關閉。

當我將所有電話更改爲getCurrentSessionimpl。 Session-per-request模式打開會話將在下班後關閉。

Transactions Basics

+0

感謝Zelldon,我會根據給出的參考資料解決它。 – 2013-03-26 02:59:44