9

为什么被buildSessionFactory()替换buildSessionFactory(ServiceRegistry)?ServiceRegistry的重要性是什么?

4

1 回答 1

6

原因在 Hibernate 的 Jira 上有解释

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

目前,SessionFactory 是通过将一堆东西扔到 Configuration 对象中,搅拌它,让它沸腾,然后取出 SessionFactory 来构建的。严肃地说,我们目前在配置中的操作方式以及我们如何使用它来构建 SessionFactory 存在一些问题: 没有“生命周期”来确定何时各种信息可用的普遍问题。这在许多方面是一个重要的遗漏:1)考虑模式生成。目前,在确定大量 db 对象名称时,我们甚至不知道方言。这会很好,因为它可以让我们透明地处理表/列名,例如,它们也是方言中的关键字/保留词。2) 类型的静态性和类型映射。因为我们目前没有任何东西可以确定它们的范围。理想情况下,类型实例会知道它绑定到的 SessionFactory。相反,我们现在要做的是在相当多的时间更改 API 方法,以便在发现需要时将 SessionFactory 作为传递参数添加。3)此外,Hibernate 中的大多数(全部?)“静态”配置参数目前都需要这样做,因为它们在这些静态类型中使用;因此,范围类型将允许我们对这些配置参数(如字节码提供者、二进制流的使用等)进行范围界定。理想情况下,我看到的情况是用户自己构建 org.hibernate.cfg.Settings(或类似的东西)实例的方案。此外,他们会将元数据应用于某种注册表(现在我们称之为 MetadataRegistry)。然后为了构建 SessionFactory,他们将提供这两条信息(通过 ctor?通过 builder?)。重要的方面是 MetadataRegistry 中的信息直到那个时间点才会被处理,这将允许我们保证解析模式对象名称、类型等可以访问运行时设置(特别是方言)

您还可以阅读对此的评论:https : //hibernate.onjira.com/browse/HHH-7580 复制粘贴太多了,我猜 Jira 不会失败,所以这个答案应该是有效的。

于 2012-12-01T20:21:22.643 回答