1. 程式人生 > >hibernate報錯:no currentsessioncontext configured!

hibernate報錯:no currentsessioncontext configured!

pro 錯誤 網絡 一個 nts 數據 有關 方法 應用服務器

使用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!