Hibernate4中buildSessionFactory方法废弃问题



Hibernate4中buildSessionFactory方法废弃问题

在用Hibernate4时会发现:

 

 

  1. SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

 

buildSessionFactory()废弃,相信很多人会觉得为什么废弃这方法,查了网上的资料,综合如下:

 

Hibernate给了个ServiceRegistry,然后拿到sessionFactory是通过:

 

  1. @BeforeClass
  2. public static void beforeClass() {
  3.         Configuration configuration = new Configuration();
  4.         //new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
  5.         //sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
  6.         ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
  7.         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

像网友说的具有注册表存储库功能,功能更多了,上面的方法废弃,其实是hibernate想你用这个类,因为他们写了个更好的东西出来。原来是这样。其实里面的源码还是:


 

 

  1. package cn.framework.dao.util;
  2. import org.hibernate.HibernateException;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.cfg.Configuration;
  5. import org.hibernate.service.ServiceRegistry;
  6. import org.hibernate.service.ServiceRegistryBuilder;
  7. public class HibernateUtil {
  8.  public static SessionFactory sessionfactory = null;
  9.  static {
  10.   try {
  11.    // 通过hibernate.cfg.xml 产生一个SessionFactory  还是和原来的方法一样的。。
  12.    sessionfactory = new Configuration().configure().buildSessionFactory();
  13.   } catch (Throwable ce) {
  14.    ce.printStackTrace();
  15.   }
  16.  }

 

 

还是用到我们上面所谓的废弃的方法。

 

这里有篇文章详细介绍了ServiceRegistry。有兴趣的可以看看。

 

http://www.open-open.com/lib/view/open1356339689713.html