web-dev-qa-db-ja.com

JPAエンティティをスキャンして、persistence.xmlファイルで永続クラスを宣言しない方法はありますか?

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エンティティをスキャンする標準的な方法はありますか? JARモジュール内からpersistence.xmlファイルのJPAエンティティをスキャンする非標準のHibernateの方法はありますか?

14
1tox

-jarをビルドするときに、エンティティとpersistence.xmlが同じクラスパスにあることを確認してください。

エンティティが別のクラスパスにある場合、エンティティをスキャンできません。それらを異なるクラスパスに配置する必要がある場合、私が見た1つのトリックを使用してそれを機能させます: maven-verify でJPAエンティティの自動検出なし.

何が終わっているかわからない場合は、.jarファイルを解凍してピークにできます。これは、解凍された永続化Webプロジェクトです。

Unpacked Web Persistence JAR

クラスがcomディレクトリの下にあり、persistence.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>
    ...

うまくいけば、そのうちの1つがうまくいきます。

16
Cody