为什么 buildSessionFactory() 被弃用了?

9
为什么会用buildSessionFactory(ServiceRegistry)代替buildSessionFactory()呢?ServiceRegistry的重要性是什么?
1个回答

6
这是因为Hibernate的Jira上有解释。

https://hibernate.onjira.com/browse/HHH-2578


目前,SessionFactory是通过将一些内容放入Configuration对象中,搅拌并让其沸腾,然后取出SessionFactory来构建的。严肃地说,我们目前在Configuration中的操作方式以及如何使用它来构建SessionFactory存在一些问题: 1)普遍问题是没有“生命周期”来确定各种信息何时可用。这在很多方面都是一个重要的遗漏: a. 考虑模式生成。当前,当许多数据库对象名称被确定时,我们甚至无法知道方言。这将是很好的,因为它将允许我们透明地处理表/列名称,这些名称也是方言中的关键字/保留字,例如。 b. 类型和类型映射的静态性。因为我们目前没有任何东西可以将它们作为范围。理想情况下,类型实例应该意识到它绑定的SessionFactory。相反,现在我们所拥有的是,在发现需要时,经常需要改变API方法以添加SessionFactory作为传递的参数。 c. 此外,Hibernate中的大多数(所有?)“静态”配置参数目前都必须是这样,因为它们在这些静态类型内部使用;因此,范围类型将允许我们范围这些配置参数(例如bytecode-provider,使用二进制流等)。 理想情况下,我希望看到的是用户构建一个org.hibernate.cfg.Settings(或类似的东西)实例。此外,他们将向某种注册表(暂称为MetadataRegistry)应用元数据。然后,为了构建SessionFactory,他们将提供这两个信息(通过ctor?通过builder?)。然而,重要的方面是,在那个时间点之前不会处理MetadataRegistry中的信息,这将允许我们保证解析模式对象名称、类型等将具有访问运行时Settings(特别是方言)的能力。

您还可以阅读有关此问题的评论:https://hibernate.onjira.com/browse/HHH-7580 复制粘贴太麻烦了,我想Jira不会崩溃,所以这个答案应该有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接