Hibernate中的Service Registry

时间:2015-07-05 14:25:12

标签: hibernate

我看到,自从Hibernate 4为了从配置中获取Session Factory,我们需要使用ServiceRegistry。

Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
SessionFactory factory = configuration.buildSessionFactory(serviceRegistry);

ServiceRegistry的目的是什么?为什么需要它?

1 个答案:

答案 0 :(得分:1)

他们重新设计了sessionFactory以将参数作为Serviceregistry对象传递。 jira票证中有一些解释。

  

目前,SessionFactory是通过抛出一堆东西构建的   一个配置对象,搅拌它,让它煮沸,然后   然后拔出SessionFactory。严肃地说,有一些   我们目前在配置中运行的方式存在问题   我们如何使用它来构建SessionFactory:

     

没有"生命周期"各种各样的作品   信息将可用。这是一个重要的遗漏   方式:

     

1)考虑模式生成。目前我们做不到   甚至在很多db对象名称出现时都知道方言   决心。这将是很好的,因为它将允许我们   透明地处理表/列名称   例如,方言中的关键字/保留字。

     

2)静态的   类型和类型映射。因为我们目前没有任何东西   哪个适用范围。理想情况下,类型实例会知道   它绑定的SessionFactory。相反,我们现在拥有的是   在很多时候添加API方法来改变   每当发现它时,SessionFactory就作为传递的参数   需要。

     

3)同样,大多数(全部?)的"静态"组态   Hibernate中的参数目前需要这样,因为   它们在这些静态类型中的使用;因此范围类型会   允许我们也调整这些配置参数的范围(比如   字节码提供者,使用二进制流等)。

     

理想情况下,我看到的是用户构建的方案   org.hibernate.cfg.Settings(或类似的东西)实例   他们自己。此外,他们将元数据应用于注册表   某种(现在我们称之为MetadataRegistry)。然后为了   构建一个SessionFactory,他们会提供这两个部分   信息(通过ctor?via builder?)。但重要的方面是   直到MetadataRegistry中的信息才会被处理   那个时间点,这将使我们能够保证解决问题   模式对象名称,类型等可以访问运行时   设置(特别是方言)

链接到ticket