【问题标题】:How to use Integrator service in Hibernate 5 for adding annotated classes如何在 Hibernate 5 中使用 Integrator 服务来添加带注释的类
【发布时间】:2015-10-03 04:10:47
【问题描述】:

这是参考JPA 2.0: Adding entity classes to PersistenceUnit *from different jar* automaticallyUnable to call Hibernate/QueryDSL from another maven subproject

Hibernate 4 似乎有一个很好的方法来动态加载实体类 org.hibernate.integrator.spi.Integrator 服务。

现在使用 Hibernate 5 时,Integrator 接口的集成方法给了我

public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
        SessionFactoryServiceRegistry serviceRegistry)
{

}

元数据的类型为 org.hibernate.boot.Metadata

我无法调用 addAnnotatedClass(),也无法获取 Hibernate 4 中的原始配置对象。

我该如何解决这个问题?

我正在使用 maven 和 jetty。

我没有使用弹簧(所以请不要提供任何基于弹簧的解决方案)

【问题讨论】:

    标签: java hibernate maven jetty hibernate-5.x


    【解决方案1】:

    这实际上与我在上周末赶上 Hibernate 5 时遇到的问题有关。您可以在 latest Javadoc for Hibernate 4 中阅读与 Configuration 类相关的计划更改。获取所有已加载实体类(包括注释实体)的信息的新位置是您提到的 Metadata 类。它有一个getEntityBindings() 方法,该方法将返回已知所有实体的PersistentClass 实体元数据表示。然而,这个Collection 是不可变的。

    建议您重新考虑使用Integrator 在运行时添加实体绑定。这在过去可能有效,但文档清楚地指出这不是故意的,因为这应该在初始化时完成。 MetadataSessionFactoryImplementor 在大多数情况下在构建后是不可变的,因此 Integrator 的预期目的不是修改这些配置项,而是将它们用作有关如何配置新的 Service 集成的信息SessionFactoryServiceRegistry

    如果您发现配置 Session 以在运行时查找所有带注释的类很烦人,我建议您尝试使用 EntityManagerFactory 方法来初始化 Hibernate,因为它更简单并且使用标准 JPA 语法如果您需要,可以将其切换到少数其他提供商。这将代表您自动扫描带注释的实体。 API 更加简化和有限,但如果您真的需要原生 Hibernate 特定功能的强大功能,可以使用access the native underlying API 的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-08
      • 2019-06-16
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多