Hibernate openSession() 與 getCurrentSession() 區別

 

1、getCurrentSession()openSession()的區別
  
web

   1getCurrentSession () 使用當前的session
     openSession()        
從新創建一個新的sessionsession

2、採用getCurrentSession()建立的session會綁定到當前線程中,spa

而採用openSession()建立的session則不會
3
採用getCurrentSession()建立的sessioncommitrollback後,會自 動關閉,而採用openSession()建立的session必須手動關閉
4
、使用getCurrentSession()須要在hibernate.cfg.xml文件中加入以下配置:
1 若是使用的是本地事務(jdbc事務)
<property name="hibernate.current_session_context_class">thread</property>
2)若是使用的是全局事務(jta事務)
<property name="hibernate.current_session_context_class">jta</property>
hibernate

 

2、openSession() getCurrentSession() 有何不一樣和關聯呢?線程

 

SessionFactory 啓動的時候, Hibernate 會根據配置建立相應的 CurrentSessionContext ,在 getCurrentSession() 被調用的時候,實際被執行的方法是 CurrentSessionContext.currentSession() 。在 currentSession() 執行時,若是當前 Session 爲空, currentSession 會調用 SessionFactory openSession 。因此 getCurrentSession() 對於 Java EE 來講是更好的獲取 Session 的方法。在一個應用程序中,若是DAO 層使用Spring hibernate 模板,經過Spring 來控制session 的生命週期,則首選getCurrentSession ()orm

相關文章
相關標籤/搜索