我们希望摆脱在 persistence.xml 和 <property name="hibernate.archive.autodetection" value="class"/>
中指定所有 jar 文件或单个类的麻烦。似乎不起作用,至少 Hibernate 不会拾取任何不在上述任何 jar 文件或包含 persistence.xml 的存档中的类。
所以我们的想法是我们自己扫描实体并向 Hibernate 提供所有检测到的类。
基本方法是:
- 使用 CDI 扩展来获取所有用 @Entity 注释的类(这有效)
- 使用 Hibernate 集成器来注册类
但是,看起来有两个问题:
- 积分器在 CDI 扩展之前运行,因此顺序不合适。
- 日志表明 Hibernate 甚至在运行集成器之前就构建了持久性单元,因此在集成器中添加类似乎为时已晚,即使我们可以解决或解决问题 1(例如,通过我们自己扫描类路径)。
基本上问题是:我们如何以编程方式将持久类添加到 JBoss 7 或 Wildfly 环境中的 Hibernate 配置中?
最佳答案
正如您已经说过的,hibernate 可能会在 CDI 之前初始化。有一个小解决方法可以消除指定每个 bean 的需要,而只需要指定 JAR。 Persistence.xml 有一个 <jar-file>jarName</jar-file>
标签使您能够指定应该扫描持久性实体的 jar。
Pascal Thivent 的详细回答 Do I need <class> elements in persistence.xml?
有时,这对我不起作用,直到我声明像<jar-file>lib/someJar.jar</jar-file>
这样的 JARS 路径。
关于java - Jboss/野蝇: programmatically add classes to Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35891814/