在用Hibernate4时会发现:
- 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>
当我用hibernate 4.3.4版本时buildServiceRegistry()方法也被废弃。
所以采用
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()//
.applySettings(configuration.getProperties()).build();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session=sessionFactory.openSession();
List<ClientArticle> list = session.createQuery("from ClientArticle").list();
像网友说的具有注册表存储库功能,功能更多了,上面的方法废弃,其实是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>
还是用到我们上面所谓的废弃的方法。