私はEclipseLink
自分のJPA
実装として使用しています。私たちのプロジェクトには、すべての構成ファイルを保持するディレクトリがあり、persistence.xmlファイルを構成ディレクトリに保存したいのcreateEntityManagerFactory
ですが、persistence-unitを見つけるためにそこを探すように指示する方法が見つかりません。
3 に答える
質問に直接答えることはできませんが、アプリケーションの構成を外部化するためにそれを行う場合は、構成可能なすべてのプロパティ(接続設定など)を別のプロパティファイルに抽出するのが最善の方法だと思います。そしてそれらをcreateEntityManagerFactory()
としてに渡しますMap
(この方法でプロパティをオーバーライドできることにも注意してくださいpersistence.xml
)。
次に、persistence.xml
構成不可能な設定(永続クラスのリストなど)のみが含まれます。つまり、アプリケーション全体を再構築せずにこれらのプロパティを変更しても意味がなく、デフォルトの場所のままにしておくことができます。
これは、spring-orm LocalContainerEntityManagerFactoryを使用して実現できます(必要がない場合は、すべてのSpringコンテキストを使用する必要はありません)。
LocalContainerEntityManagerFactory lcemf = new LocalContainerEntityManagerFactory ();
lcemf.setPersistenceUnitName("some_pu");
lcemf.setpersistenceXmlLocation("file:/data/config.xml");
EntityManagerFactory emf = lcemf.createNativeEntityManagerFactory();
また、xmlを完全に無視し、LocalContainerEntityManagerFactoryを使用してコードですべてを構成することもできます(setPackagesToScanを参照)。
persistence.xml
META-INF
クラスパスのディレクトリ内に常に存在する必要があります。さまざまなタイプのJavaアプリケーションでMETA-INFが存在する必要がある場所の詳細については、こちらを参照してください。
永続性ユニットは、persistence.xml構成ファイルによって定義されます。META-INFディレクトリにpersistence.xmlが含まれているJARファイルまたはディレクトリは、永続性ユニットのルートと呼ばれます。永続性ユニットのスコープは、永続性ユニットのルートによって決定されます。
各永続性ユニットは、永続性ユニットのスコープに固有の名前で識別される必要があります。
永続ユニットは、WARまたはEJB JARファイルの一部としてパッケージ化することも、WARまたはEARファイルに含めることができるJARファイルとしてパッケージ化することもできます。
永続ユニットをクラスのセットとしてEJBJARファイルにパッケージ化する場合、persistence.xmlをEJBJARのMETA-INFディレクトリに配置する必要があります。
永続性ユニットをクラスのセットとしてWARファイルにパッケージ化する場合、persistence.xmlはWARファイルのWEB-INF / classes/META-INFディレクトリに配置する必要があります。