hibernate報錯:no currentsessioncontext configured!
使用hibernate框架時候報錯:no currentsessioncontext configured!
這個錯誤是當我們使用getCurrentSession();時候引起的,原因是currentSession配置錯誤,與事務有關,當我們使用currentSession的時候需要在hibernate.cfg.xml中進行如下事務配置:
1、如果是本地事務:
<property name="hibernate.current_session_context_class">thread</property>
2、如果是全局事務
<property name="hibernate.current_session_context_class">jta</property>
這樣配置一下就好了!
當然,如果獲得session 對象時不使用的是 sessionFactory.getCurrentSession(),而是使用 sessionFactory.openSession()就不會出現這個錯誤了。
說一下getCurrentSession()和openSession()方法的區別:
openSession()是不管任何情況都重新開啟一個Session,而getCurrentSession();相對的增加了一個判斷,在有Session的情況下就會直接去調用,沒有session的話才會創建,如果有事務操作的話getCurrentSession();更好一些,很容易的使得一個線程只有一個session對象。
本地事務和jta事務:
本地事務:使用 JDBC 事務界定時,您可以將多個 SQL 語句結合到一個事務中。JDBC 事務的一個缺點是事務的範圍局限於一個數據庫連接。一個 JDBC 事務不能跨越多個數據庫。
jta事務:JTA是一種高層的,與實現無關的,與協議無關的API,應用程序和應用服務器可以使用JTA來訪問事務。
JTA允許應用程序執行分布式事務處理——在兩個或多個網絡計算機資源上訪問並且更新數據,這些數據可以分布在多個數據庫上。JDBC驅動程序的JTA支持極大地增強了數據訪問能力。
區別:JDBC事務控制的局限性在一個數據庫連接內,但是其使用簡單;JTA事務的功能強大,事務可以跨越多個數據庫或多個DAO,使用較復雜。
hibernate報錯:no currentsessioncontext configured!