質問

OpenJPAでエンティティの検出を探しています。 Persistence.xmlのすべてのエンティティを宣言する必要はないこと。

編集:申し訳ありませんが、Java SEアプリを開発したと言うのを忘れました。

役に立ちましたか?

解決

読む 永続的なクラスリスト ユーザーマニュアルのセクション。

多くのORM製品とは異なり、OpenJPAはスタートアップでの永続的なクラスのすべてを知る必要はありません。 OpenJPAは、JVMにロードされると、新しい永続的なクラスを自動的に発見します。実際、OpenJPAの下でアプリケーションを実行するために、新しい永続的なクラスを導入できます。

  • 注:ユーザーマニュアルに文書化されているいくつかの制限がありますが、この投稿を簡単に保つためにそれらを除外しました。

他のヒント

JPA仕様ごとに、すべてのクラスをJava SE環境で明示的にリストする必要があります。

6.2.1.6マッピングファイル、JARファイル、クラス、除外されたクラス

(...)

JARファイルとマッピングファイルの代わりに、またはそれに加えて、指定された管理された永続性クラスのリストも指定できます。これらのクラスで見つかったマッピングメタデータアノテーションは、処理されるか、マッピングアノテーションのデフォルトを使用してマッピングされます。クラス要素は、管理された永続性クラスをリストするために使用されます。 携帯性を保証するには、Java SE環境で指定されたすべての管理された永続性クラスのリストを指定する必要があります。 ポータブルJava SEアプリケーションは、ここで説明する他のメカニズムに依存して、持続ユニットの管理された永続性クラスを指定するべきではありません。 Persistence Providersは、管理するエンティティクラスとクラスのセットを、それぞれに完全に列挙する必要がある場合もあります。 persistence.xml Java SE環境のファイル。

持続ユニットのルートに含まれるすべてのクラスは、注釈付き管理された永続性クラスを検索し、それらにあるマッピングメタデータアノテーションは処理されるか、マッピングアノテーションのデフォルトを使用してマッピングされます。持続ユニットのルートに含まれる注釈付き持続性クラスを永続ユニットに含めることを意図していない場合、 exclude-unlisted-classes 要素を使用する必要があります。 exclude-unlisted-classes 要素は、Java SE環境での使用を目的としていません。

今、あなたがポータブルでないことを気にしないなら、あなたはプロバイダーの拡張機能を使用するかもしれませんが、私はHibernateのものに似たものを見つけることができませんでした hibernate.archive.autodetection OpenJPAのプロパティ。

スプリングを使用します JPA統合 (これにより、より柔軟なClassPathスキャンが可能になります)は、別のオプションです。

また、これを行うことができるJPA-Pluginもあります。最新バージョンはMaven Centralでは利用できないため、クローンと構築する必要があります。

jpa-plugin

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top