有没有办法扫描 JPA 实体,不声明持久性.xml文件中的持久性类?

2022-09-04 02:26:59

我想利用 JPA @Entity注释来不将类实体声明为 J2SE 持久性.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>

这是我的实际坚持.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 模块中扫描持久性.xml文件中的 JPA 实体?是否有一种不标准的休眠方法可以从JAR模块中扫描持久性.xml文件中的JPA实体?


答案 1

-确保在构建 jar 时,实体和持久性.xml最终位于同一类路径中。

如果实体位于另一个类路径中,则无法扫描这些实体。如果你需要让它们坐在不同的类路径中,这里有一个我见过的技巧来使它起作用:在maven-verify中不自动检测JPA实体

如果您不确定事情在哪里结束,可以解压缩.jar文件并达到峰值。这是一个解压缩的持久性 Web 项目:

Unpacked Web Persistence JAR

请注意,我的类位于 com 目录中,而我的持久性.xml位于 META-INF 目录中。两者都位于相同的“类”类路径中,因此自动扫描将起作用。

-设置 hibernate.archive.autodetection 属性。

<!-- 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>
    ...

希望其中一个能为你工作。


答案 2

推荐