Java Jboss/Wildfly:以编程方式向Hibernate添加类

Java Jboss/Wildfly:以编程方式向Hibernate添加类,java,hibernate,jboss,Java,Hibernate,Jboss,我们希望不必在persistence.xml中指定所有jar文件或单个类,似乎不起作用,至少Hibernate不会选择任何不在上述jar文件或包含persistence.xml的存档中的类 因此,我们的想法是自己扫描实体,并为Hibernate提供所有检测到的类 基本方法是: 使用CDI扩展来获取所有用@Entity注释的类(这很有效) 使用Hibernate积分器注册类 然而,似乎有两个问题: 积分器在CDI扩展之前运行,因此顺序不合适 日志表明,Hibernate甚至在运行积分器之前就构

我们希望不必在persistence.xml中指定所有jar文件或单个类,
似乎不起作用,至少Hibernate不会选择任何不在上述jar文件或包含persistence.xml的存档中的类

因此,我们的想法是自己扫描实体,并为Hibernate提供所有检测到的类

基本方法是:

  • 使用CDI扩展来获取所有用@Entity注释的类(这很有效)
  • 使用Hibernate积分器注册类
然而,似乎有两个问题:

  • 积分器在CDI扩展之前运行,因此顺序不合适
  • 日志表明,Hibernate甚至在运行积分器之前就构建了持久化单元,因此在积分器中添加类似乎为时已晚,即使我们可以解决或解决问题1(例如,我们自己扫描类路径)

  • 基本上,问题是:在JBoss 7或Wildfly环境中,我们如何以编程方式将持久类添加到Hibernate配置中?

    如您所述,Hibernate可以在CDI启动之前初始化。有一个小的变通方法,可以消除指定每个bean的需要,但只指定jar。Persistence.xml有一个
    jarName
    标记,允许您指定应扫描持久性实体的jar

    Pascal Thivent的详细回答


    有时候,在我声明jar的路径之前,这对我来说是不起作用的,比如
    lib/someJar.jar

    正如您已经说过的,hibernate可能在CDI启动之前就已经初始化了。有一个小的变通方法,可以消除指定每个bean的需要,但只指定jar。Persistence.xml有一个
    jarName
    标记,允许您指定应扫描持久性实体的jar

    Pascal Thivent的详细回答


    有时候,在我声明jar的路径之前,这对我来说是不起作用的,比如
    lib/someJar.jar

    是的,jar文件标签就是我们当前使用的。但正如我所说的,如果可能的话,我们想摆脱它Pascal还提到了
    hibernate.archive.autodetection
    ,但不幸的是,这不起作用,这可能是由于安装问题,即hibernate没有/无法扫描整个类路径。是的,jar文件标记是我们当前使用的。但正如我所说的,如果可能的话,我们想摆脱它Pascal还提到了
    hibernate.archive.autodetection
    ,但不幸的是,这不起作用,这可能是由于安装问题,即hibernate没有/无法扫描整个类路径。