hibernate创建SessionFactory的几种方式,及原因分析?
2018年10月27日 12:24:17 River6666 阅读数:273
全网搜索不到原因分析,如下是我自己总结的,参考的是源码介绍!
1. hibernate3.X
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
- 1
2. hibernate4.x
SessionFactory sessionFactory = null;
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
- 1
- 2
- 3
- 4
3. hibernate5.X
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
try {
sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
}
catch (Exception e) {
StandardServiceRegistryBuilder.destroy( registry );
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4.上面是:hibernate创建SessionFactory的几种方式,原因分析如下!
4.1 hibernate3.X中Configure类的说明
- 它表示一个配置实例,当创建会话工厂时,它允许应用程序指定将被使用的属性与映射的文档
- 这配置类只是当作初始化时的一个对象(别无他用)
4.2 hibernate4.X中Configure类的说明
- 注意:在4.0版本后,这个类将会被用"服务注册构建器(ServiceRegistryBuilder)及元数据资源类(MetadataSources)"所代替,基于这点,这个类将会被废弃以及在5.0版本计划移除
- 详细内容已被官方抹掉了,以前能访问详细内容页面.它大概内容有:“这种方法有一些重要的缺点导致它的弃用和新方法的开发”.
- 通过看新方法的优点,我们应该能知道废弃它的原因,这我就不过多介绍了.
4.3 hibernate5.X中Configure类的说明
- 代表启动hibernate的一种方式.实际上从历史上看这是引导hibernate的方式(言外之意:以前是这样干的),现在可以选择其它方式)
- 我们将会尝试,从他们被添加的资源中递增构建这映射,这是与这个类传统行为的重要区别
- 这种改变在行为上的分支是:用户可以在这添加配置与映射的资源,但是他们再也不能在这里查询映射迁移的状态(持久化类,集合,其它)
- 与4.X的变化是使用StandardServiceRegistry ,而不是使用ServiceRegistry ,编码上也进行相应调整,相对4.X简化了
5.总结
- hibernate5.X是可以使用hibernate3中编码风格创建SessionFactory
- hibernate5.X不能使用Hibernate4创建SessionFactory的方式,因为:代码编译不会报错,但在运行时会抛出一个QuerySyntaxException异常
- 就个人而言,如果是学习开发的话,首选hibernate3.X编码,它编码少, 我能记住! 其它版本太繁琐!