歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Hibernate中編程式事務的簡單使用

一,openSessioin方式開啟或者關閉事務

                Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();//開啟事務
   
   //TODO:各類CRUD操作
   
   session.getTransaction().commit(); //提交事務
  } catch (Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback(); //出錯回滾
  } finally {
   HibernateUtils.closeSession(session); //關閉session
  }

使用這種方式開啟和關閉事務,但是考慮到我們的事物一般都是在Service層開啟或者關閉的,而service裡面在調用Dao層方法的時候,大部分情況下,都是調用多個方法,即一對多的調用,要想保證我每次開啟事務的時候,用的都是一個Session,上面這種簡陋的方法就不行了。

二,getCurrentSession使用事務

1,添加使用currentSession的配置

<property name="hibernate.current_session_context_class">thread</property><!-- 將session放到threadLoacl裡面 -->

2,替換getSession方法

對與如下圖,其中要在單元測試類中添加測試用戶方法:

代碼:

每次獲取session的時候,使用getCurrentSession方法,獲取當前線程使用的Session。同樣,在添加log的時候

也使用上面方法獲取session,這樣就能保證我一連串的CRUD操作的時候,使用的是一個Session。

小結:

*openSession是必須要關閉session的,而currentSession是在事務結束之後自動關閉session

*opsenSession沒有和當前線程綁定,currentSession和當前線程綁定了

*使用currentSession的時候需要在hibernate的配置文件中進行配置

Hibernate學習入門教程  http://www.linuxidc.com/Linux/2015-08/121498.htm

在Hibernate中開啟日志 http://www.linuxidc.com/Linux/2015-07/120499.htm

Hibernate+JUnit測試實體類生成數據庫表  http://www.linuxidc.com/Linux/2015-07/120161.htm

Hibernate整體理解 http://www.linuxidc.com/Linux/2014-07/104405.htm

Hibernate的映射機制  http://www.linuxidc.com/Linux/2014-12/110265.htm

Hibernate 的詳細介紹:請點這裡
Hibernate 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved