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. 详细内容已被官方抹掉了,以前能访问详细内容页面.它大概内容有:“这种方法有一些重要的缺点导致它的弃用和新方法的开发”.
  3. 通过看新方法的优点,我们应该能知道废弃它的原因,这我就不过多介绍了.

4.3 hibernate5.X中Configure类的说明

  1. 代表启动hibernate的一种方式.实际上从历史上看这是引导hibernate的方式(言外之意:以前是这样干的),现在可以选择其它方式)
  2. 我们将会尝试,从他们被添加的资源中递增构建这映射,这是与这个类传统行为的重要区别
  3. 这种改变在行为上的分支是:用户可以在这添加配置与映射的资源,但是他们再也不能在这里查询映射迁移的状态(持久化类,集合,其它)
  4. 与4.X的变化是使用StandardServiceRegistry ,而不是使用ServiceRegistry ,编码上也进行相应调整,相对4.X简化了

5.总结

  1. hibernate5.X是可以使用hibernate3中编码风格创建SessionFactory
  2. hibernate5.X不能使用Hibernate4创建SessionFactory的方式,因为:代码编译不会报错,但在运行时会抛出一个QuerySyntaxException异常
  3. 就个人而言,如果是学习开发的话,首选hibernate3.X编码,它编码少, 我能记住! 其它版本太繁琐!

你可能感兴趣的:(java高级)