在用Hibernate4時會發現:
<SPAN style="FONT-SIZE: 18px">SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();</SPAN>
SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();buildSessionFactory()廢棄,相信很多人會覺得為什麼廢棄這方法,查了網上的資料,綜合如下:
Hibernate給了個ServiceRegistry,然後拿到sessionFactory是通過:
SPAN style="FONT-SIZE: 18px"> @BeforeClass public static void beforeClass() { Configuration configuration = new Configuration(); //new SchemaExport(new AnnotationConfiguration().configure()).create(false, true); //sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); </SPAN> @BeforeClass public static void beforeClass() { Configuration configuration = new Configuration(); //new SchemaExport(new AnnotationConfiguration().configure()).create(false, true); //sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
像網友說的具有註冊表格儲存體庫功能,功能更多了,上面的方法廢棄,其實是hibernate想你用這個類,因為他們寫了個更好的東西出來。原來是這樣。其實裡面的源碼還是:
SPAN style="FONT-SIZE: 18px">package cn.framework.dao.util; import org.hibernate.HibernateException; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; public class HibernateUtil { public static SessionFactory sessionfactory = null; static { try { // 通過hibernate.cfg.xml 產生一個SessionFactory 還是和原來的方法一樣的。。 sessionfactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ce) { ce.printStackTrace(); } }</SPAN> package cn.framework.dao.util;import org.hibernate.HibernateException;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;public class HibernateUtil { public static SessionFactory sessionfactory = null; static { try { // 通過hibernate.cfg.xml 產生一個SessionFactory 還是和原來的方法一樣的。。 sessionfactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ce) { ce.printStackTrace(); }
}還是用到我們上面所謂的廢棄的方法。
這裡有篇文章詳細介紹了ServiceRegistry。有興趣的可以看看。