1. 程式人生 > >Hibernate中編程式事物的簡單使用

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

fzu nmp asc ddk lda nod zax rii oai


一,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中編程式事物的簡單使用