我想利用JPA @Entity注释不要将类实体声明为J2SE persistence.xml文件。我想避免的事情:
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.mycompany.entities.Class1</class>
<class>com.mycompany.entities.Class2</class>
<class>com.mycompany.entities.Class3</class>
</persistence-unit>
这是我的实际persistence.xml看起来很像
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<property name="hibernate.archive.autodetection" value="class, hbm" />
<property name="hibernate.cache.use_second_level_cache" value="false" />
<property name="hibernate.cache.use_query_cache" value="false" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>
</persistence-unit>
是否有一种标准方法可以在JAR模块中扫描persistence.xml文件中的JPA实体? 是否有一种非标准的Hibernate方法可以在JAR模块中扫描persistence.xml文件中的JPA实体?
答案 0 :(得分:16)
- 在构建jar时,请确保您的实体和persistence.xml最终位于相同的类路径中。
如果实体位于另一个类路径中,则无法扫描这些实体。如果你需要让他们坐在不同的类路径中,那么我看到了一个让它成功的技巧:No autodetection of JPA Entities in maven-verify。
如果您不确定结束的位置,可以解压缩.jar文件并达到峰值。这是一个解压缩的持久性Web项目:
请注意,我的类位于com目录下,而我的persistence.xml位于META-INF目录中。两者都在相同的“类”类路径中,因此自动扫描将起作用。
-Set hibernate.archive.autodetection property。
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<property name="hibernate.archive.autodetection" value="class, hbm" />
- 将false添加到持久性单元
<persistence-unit name=...>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
...
希望其中一个能为你效劳。