getCurrentSession()与openSession()的区别?
1、getCurrentSession()與openSession()的區(qū)別?
- 采用getCurrentSession()創(chuàng)建的session會(huì)綁定到當(dāng)前線程中,而采用openSession(),創(chuàng)建的session則不會(huì)
- 采用getCurrentSession()創(chuàng)建的session在commit或rollback時(shí)會(huì)自動(dòng)關(guān)閉,而采用openSession(),創(chuàng)建的session必須手動(dòng)關(guān)閉
2、使用getCurrentSession()需要在hibernate.cfg.xml文件中加入如下配置:
- 如果使用的是本地事務(wù)(jdbc事務(wù))
- 如果使用的是全局事務(wù)(jta事務(wù))
openSession() 與 getCurrentSession() 有何不同和關(guān)聯(lián)呢?
在 SessionFactory 啟動(dòng)的時(shí)候, Hibernate 會(huì)根據(jù)配置創(chuàng)建相應(yīng)的 CurrentSessionContext ,在getCurrentSession() 被調(diào)用的時(shí)候,實(shí)際被執(zhí)行的方法是 CurrentSessionContext.currentSession() 。在currentSession() 執(zhí)行時(shí),如果當(dāng)前 Session 為空, currentSession 會(huì)調(diào)用 SessionFactory 的 openSession 。所以 getCurrentSession() 對(duì)于 Java EE 來(lái)說(shuō)是更好的獲取 Session 的方法。
許多時(shí)候出現(xiàn)session is close();原因就是你在hibernate.cfg.xml里面設(shè)置了
<property name="hibernate.current_session_context_class">thread</property>系統(tǒng)在commit();執(zhí)行完之后就關(guān)閉了session,這時(shí)候你手動(dòng)再關(guān)閉session就當(dāng)然提示錯(cuò)誤了
總結(jié)
以上是生活随笔為你收集整理的getCurrentSession()与openSession()的区别?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Hibernate实现limit查询报错
- 下一篇: 图解 Hibernate,session