1. 程式人生 > >Hibernate中同一個執行緒獲取相同session

Hibernate中同一個執行緒獲取相同session

為什麼

在Hibernate中事物是與session相關的,一般情況下session會在Service層建立,

Service中

Session session = HibernateUtils.openSession()

tx = session.beginTransaction();

dao.save();
dao.xxx();

tx.commit();

在Dao中就需要使用session.save()或者session.xxx(),而為了在同一個事物中執行這兩個方法,所以在這兩個方法中應該使用與Service中一樣的session

怎麼辦

一將session傳遞給dao層,即給為dao.save(session,obj)

二session物件的生命週期與當前執行緒繫結

1.在hibernate.cfg.xml中定義常量

<property name="hibernate.current_session_context_class">thread</property>


2.使用

在HibernateUtils裡面新增一個方法

public Session getCurrentSession(){
				return sessionFactory.getCurrentSession;
			}


3.注意

通過該方法獲得的session物件,都不需要手動關閉,因為噹噹前執行緒結束的時候會自動關閉該session,如果手動呼叫的話還會出錯

因為如果已經手動關掉了,執行緒結束的時候又關掉一次,就是重複關閉一個物件,顯然會出錯