標籤:ssi 多個 text 功能 驅動 jdb 不能 事務控制 csdn
使用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!