您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關hibernate中session如何關閉,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
具體如下。
Student student = new Student(); student.setName("Jan"); student.setAge("22"); student.setAddress("廣東省肇慶市"); Session session =HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); session.save(student); session.flush(); session.getTransaction().commit();
1、getCurrentSession()與openSession()的區別?
采用getCurrentSession()
創建的session會綁定到當前線程中,而采用openSession()
,創建的session則不會
采用getCurrentSession()
創建的session在commit或rollback時會自動關閉,而采用openSession()
,創建的session必須手動關閉
2、使用getCurrentSession()
需要在hibernate.cfg.xml文件中加入如下配置:
如果使用的是本地事務(jdbc事務)
<property name="hibernate.current_session_context_class">thread</property>
如果使用的是全局事務(jta事務)
<property name="hibernate.current_session_context_class">jta</property>
openSession()
與 getCurrentSession()
有何不同和關聯呢?
在 SessionFactory 啟動的時候, Hibernate 會根據配置創建相應的 CurrentSessionContext ,在getCurrentSession()
被調用的時候,實際被執行的方法是 CurrentSessionContext.currentSession()
。在currentSession()
執行時,如果當前 Session 為空, currentSession 會調用 SessionFactory 的 openSession 。所以 getCurrentSession()
對于 Java EE 來說是更好的獲取 Session 的方法。
許多時候出現session is close();
原因就是你在hibernate.cfg.xml里面設置了
<property name="hibernate.current_session_context_class">thread</property>
系統在commit();
執行完之后就關閉了session,這時候你手動再關閉session就當然提示錯誤了
關于“hibernate中session如何關閉”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。