1. 程式人生 > >hibernate建立SessionFactory的幾種方式,及原因分析?

hibernate建立SessionFactory的幾種方式,及原因分析?

全網搜尋不到原因分析,如下是我自己總結的,參考的是原始碼介紹!

1. hibernate3.X

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

2. hibernate4.x

SessionFactory sessionFactory = null;
Configuration configuration =  new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);

3. hibernate5.X

final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
try {
	sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
}
catch (Exception e) {
	StandardServiceRegistryBuilder.destroy( registry );
}

4.上面是:hibernate建立SessionFactory的幾種方式,原因分析如下!

4.1 hibernate3.X中Configure類的說明

  1. 它表示一個配置例項,當建立會話工廠時,它允許應用程式指定將被使用的屬性與對映的文件
  2. 這配置類只是當作初始化時的一個物件(別無他用)

4.2 hibernate4.X中Configure類的說明

  1. 注意:在4.0版本後,這個類將會被用"服務註冊構建器(ServiceRegistryBuilder)及元資料資源類(MetadataSources)"所代替,基於這點,這個類將會被廢棄以及在5.0版本計劃移除
  2. 詳細細節,現在被官方抹掉了,以前是可以詳細細節頁面的.大概講解的是:“這種方法有一些重要的缺點導致它的棄用和新方法的開發”,我想我們看新方法的優點就應該能知道廢棄它的原因吧!

4.3 hibernate5.X中Configure類的說明

  1. 代表啟動hibernate的一種方式.實際上從歷史上看這是引導hibernate的方式(言外之意:以前是這樣乾的),現在可以選擇其它方式)
  2. 我們將會嘗試,從他們被新增的資源中遞增構建這對映,這是與這個類傳統行為的重要區別
  3. 這種改變在行為上的分支是:使用者可以在這新增配置與對映的資源,但是他們再也不能在這裡查詢對映遷移的狀態(持久化類,集合,其它)
  4. 與4.X的變化是使用StandardServiceRegistry ,而不是使用ServiceRegistry ,編碼上也進行相應調整,相對4.X簡化了