hibernate獲取Session

     Session:是應用程序與數據庫之間的一個會話,是Hibernate運作的中心,持久層操作的基礎.對象的生命週期/事務的管理/數據庫的存取都與Session息息相關.
1.Session對象是通過SessionFactory構建的,Hibernate獲取session的兩種方式爲openSession和getCurrentSession
openSession每次都會打來一個新的Session,使用過後需要調用Session的close方法
getCurrentSession會在上下文中查找Session,找到就使用已有的Session,找不到時新建Session,Session在事務提交後自動關閉,不需要調用Session的close方法
2.使用條件
openSession必須關閉,currentSession在事務結束後自動關閉
openSession沒有和當前線程綁定,currentSession和當前線程綁定
如果使用currentSession需要在hibernate.cfg.xml文件中進行配置:
   *如果是本地事務(jdbc事務)
     <propertyname="hibernate.current_session_context_class">thread</property>
   *如果是全局事務(jta事務)
   <propertyname="hibernate.current_session_context_class">jta</property>
全局事務:資源管理器管理和協調的事務,可以跨越多個數據庫和進程。資源管理器一般使用XA 二階段提交協議與“企業信息系統”(EIS) 或數據庫進行交互。
本地事務:在單個 EIS或數據庫的本地並且限制在單個進程內的事務。本地事務不涉及多個數據來源。
3.使用場合
這裏主要說的是currentSession的使用場合。
currentSession和當前線程綁定,從上下文中取得session,可以通過一系列的操作共用一個session,操作完成之後再使用事務提交,這樣能夠保證這些操作的數據同步。比如實際使用的日誌記錄過程:
  日誌,是編程中很常見的一個關注點.用戶在對數據庫進行操作的過程需要將這一系列操作記錄,以便跟蹤數據庫的動態.那麼一個用戶在向數據庫插入一條記錄的時候,就要向日志文件中記錄一條記錄,用戶的一系列操作都要在一個Session中進行,否則這就成爲了兩個線程.不能保證同步.這時就需要使用currentSession來使用同一個session保存數據。
4.使用currentSession需要配置hibernate.cfg.xml
 <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
5.currentSession的用法
@Test
	public void testStudent() {
		// 學生測試類
		Student s = new Student();
		StudentPK pk = new StudentPK();
		pk.setId("1");
		pk.setName("zhangsan");
		s.setPk(pk);
//		s.setName("s1");
		s.setAge(20);

		// 得到session
//		Session session = sf.openSession();
		Session session = sf.getCurrentSession();
		// 開啓事務
		session.beginTransaction();
		// session執行save
		session.save(s);
		// 事務提交
		session.getTransaction().commit();
//		Session session2 = sf.getCurrentSession();
//		System.out.println(session==session2);
		
//		Session session2 = sf.openSession();
//		System.out.println(session==session2);
		// 關閉session
//		session.close();
	}


以上爲hibernate取得session的簡介,具體的使用要根據具體的需求和要求,比如執行效率等確定。
發佈了50 篇原創文章 · 獲贊 46 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章