2

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

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

4

3 に答える 3

4

ユーザー マニュアルの永続クラス リストのセクションをお読みください。

多くの ORM 製品とは異なり、OpenJPA は起動時にすべての永続クラスを認識する必要はありません。OpenJPA は、新しい永続クラスが JVM にロードされると自動的に検出します。実際、OpenJPA の下で実行中のアプリケーションに新しい永続クラスを導入できます。

  • 注: ユーザー マニュアルに記載されているいくつかの制限がありますが、この投稿を簡潔にするためにそれらを省略しました。
于 2010-06-21T15:55:26.723 に答える
3

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

6.2.1.6 mapping-file、jar-file、class、exclude-unlisted-classes

(...)

JAR ファイルとマッピング ファイルの代わりに、またはこれらに加えて、名前付き管理持続性クラスのリストを指定することもできます。これらのクラスで見つかったマッピング メタデータ アノテーションはすべて処理されるか、マッピング アノテーションのデフォルトを使用してマッピングされます。class 要素は、マネージド永続性クラスを一覧表示するために使用されます。移植性を保証するために、Java SE 環境ではすべての名前付き管理持続性クラスのリストを指定する必要があります。移植可能な Java SE アプリケーションは、永続性ユニットのマネージド永続性クラスを指定するために、ここで説明する他のメカニズムに依存しないでください。永続化プロバイダは、管理対象のエンティティ クラスとクラスのセットが、それぞれで完全に列挙されている必要がある場合もあります。 persistence.xmlJava SE 環境のファイル。

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

移植性がなくても構わない場合は、プロバイダー拡張機能を使用することもできますがhibernate.archive.autodetection、OpenJPA で Hibernate のプロパティに似たものを見つけることができませんでした。

Spring のJPA 統合(より柔軟なクラスパス スキャンを可能にする) を使用することも別のオプションです。

于 2010-06-20T13:52:56.217 に答える