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の方法はありますか?
-jarをビルドするときに、エンティティとpersistence.xmlが同じクラスパスにあることを確認してください。
エンティティが別のクラスパスにある場合、エンティティをスキャンできません。それらを異なるクラスパスに配置する必要がある場合、私が見た1つのトリックを使用してそれを機能させます: maven-verify でJPAエンティティの自動検出なし.
何が終わっているかわからない場合は、.jarファイルを解凍してピークにできます。これは、解凍された永続化Webプロジェクトです。
クラスが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つがうまくいきます。