1. 程式人生 > 其它 >Java中使用Hibernate系列之載入並存儲物件學習(第三節)

Java中使用Hibernate系列之載入並存儲物件學習(第三節)

經過第一、二節的學習,現在可以使用Hibernate來載入和儲存物件了,先編寫一個帶有main()方法的EventManager類:

網路配圖

程式碼如下:

package events;
import org.hibernate.Session;
import java.util.Date;
import util.HibernateUtil;
public class EventManager {
public static void main(String[] args) {
EventManager mgr = new EventManager();
if (args[0].equals("store")) {
mgr.createAndStoreEvent("My Event", new Date());
}
HibernateUtil.getSessionFactory().close();
}
private void createAndStoreEvent(String title, Date theDate) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
}
}

我們建立了個新的Event物件並把它傳遞給Hibernate,現在Hibernate負責與SQL進行溝通,並把INSERT命令傳給資料庫;在執行之前,讓我們看一下處理Session和Transaction的程式碼。

一個Session就是個單一的工作單元,我們假設HibernateSession和資料庫事務是一一對應的,這是為了讓我們的程式碼從底層的事務系統中脫離出來。

網路配圖

sessionFactory.getCurrentSession()是做什麼的呢?首先,只要你持有SessionFactory,可以在任何時候、任何地點呼叫這個方法,getCurrentSession()方法會返回“當前的”工作單元。

Session在第一次被使用的時候,即第一次呼叫getCurrentSession()的時候,其生命週期就開始,然後它被Hibernate繫結到當前執行緒中,當事務結束的時候,不管是提交還是回滾,Hibernate都會自動把Session從當前執行緒剝離,並且關閉它。

假若你再次呼叫getCurrentSession(),你會得到一個新的Session,並且開始一個新的工作單元,這種執行緒繫結(thread-bound)的程式設計模型(model)是使用Hibernate的最廣泛的方式,因為它支援對你的程式碼靈活分層(事務劃分可以和你的資料訪問程式碼分離開來,在本教程的後面部分就會這麼做)。

網路配圖

好了,這一節的學習先到這裡,後面章節中會繼續學習Hibernate。我們學習方式是每一節學習一個知識點(每天花10分鐘學習)。