我部署了一个包含WEB-INF/classes
目录中实体的war,但现在我将这些实体移动到一个单独的项目/模块中,现在这些实体位于WEB-INF/lib/*.jar
中
更改后,wildfly未能扫描在部署时产生错误的实体。
然后我尝试添加
<class>class.inside.webinf.lib.Entity1</class>
标记以及正确部署的所有内容。
file.war/WEB-INF/classes/META-INF/persistence.xml
上的完整persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="pu" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/jboss/datasources/sgsdscore</jta-data-source>
<class>io.ingenia.sgsds.score.entity.Entity1</class>
<class>io.ingenia.sgsds.score.entity.EntityN</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.jdbc.batch_size" value="200"/>
<property name="hibernate.order_inserts" value="true" />
<property name="hibernate.order_updates" value="true" />
<property name="hibernate.cache.use_second_level_cache" value="true"/>
</properties>
</persistence-unit>
</persistence>
我是不是错过了什么?
WEB-INF/lib/*.jar
中的EJB成功扫描。。。
我想这个答案也回答了我的问题https://stackoverflow.com/a/6263592/39998
将实体放在库目录中(如WEB-INF/lib/entities.jar
)是可以的,但persistence.xml文件必须放在WEB-INF/lib/entities.jar/META-INF/persistence.xml
中
如果persistence.xml文件在WEB-INF/classes/META-INF/persistence.xml
内,则自动扫描将仅在WEB-INF/classes/*
内发生
有道理。(有点…)
通常情况下,这应该可以工作。我在大多数项目中都使用WEB-INF/lib/*.jar
中的JPA实体类。
但是,当某些类与persistence.xml
描述符不在同一个JAR中时,可能会出现问题。
很难说没有看到persistence.xml
文件。您可以指定exclude-unlisted-classes
,它将表示只查看列出的类。您必须使用jar-file
来指示要扫描的JAR文件(从您的问题中不清楚您是否已经在扫描了。