2011-01-19 6 views

答えて

41

更新: Spring 3.1はpersistence.xmlフリーJPA構成をサポートします。Spring 3.1 M2: Configuration Enhancementsを参照してください。


ダリオの答えは実用的には良いが、技術的には正しくない。 - スタンドアロン環境に、persistence.xmlは持続性プロバイダによって解析される

  • EntityManagerFactory createEntityManagerFactory(String emName, Map map)

    PersistenceProviderは、二つのファクトリメソッドを有します。

  • EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) - アプリケーションサーバー環境では、persistence.xmlはアプリケーションサーバーによって解析され、内容はPersistenceUnitInfoとして渡されます。

スプリングのLocalContainerEntityManagerFactoryBeanは、アプリケーションサーバー環境をエミュレートします。したがって、persistence.xml自体を解析し、その内容をアプリケーションコンテキストの値とマージし、2番目のファクトリメソッドを使用してそれを永続性プロバイダに渡します。

しかし、persistence.xmlデータを取得するプロセスは設定可能です:

  • あなたはpersistenceXmlLocationプロパティを使用してpersistence.xmlファイルの名前を設定することができます - それは、アプリケーションサーバのデフォルトのJPAの初期化戦略との競合を避けるために便利です。

  • PersistenceUnitInfoの送信元を完全に上書きするには、カスタムPersistenceUnitManager戦略を設定します。そのような管理者がそのまま使用可能ではないですが

だから、実際には、カスタムPersistenceUnitManagerを書き込むことによってpersistence.xmlずに春にJPAを設定することができます。

+1

非常に良い答え、私はこの日のためにすべての票を使い果たしていないならば、あなたに投票したいと思います。私は、OPが不必要で多少複雑なので、春の中で掘り起こすことを気にしないと思った。 – darioo

+0

すべての説明のための答え+1ありがとう – user373201

7

persistence.xmlが必要です。 Hibernateを直接使用している場合は、persistence.xmlは必要ありません。

+1

JPAプロバイダとしてのHibernateを使用するSpring JPAにpersistence.xmlファイルが必要な理由を教えてください。 – Suvasis

1

JPA仕様では、ファイルが必要な場所は明記されていませんが、EntityManagerFactoryとEntityManagerの契約の定義や実質的には仕様全体にわたって、persistence.xmlファイルは繰り返し記述されています。

最近、persistence.xmlをまったく使用せずに、Hibernate 3.6でJPA 2.0をプログラム的に構成できるかどうかという疑問に対処する必要がありました。

これはできないと判断しましたが、ファイルを最小限の構成に設定することができます。ファイルに少なくとも永続性ユニットの名前が含まれている必要があると判断しました。残りの情報は、プログラマチックにエンティティマネージャファクトリにパラメータとして提供することができます。

私は春を使ったことが一度もありません。したがって、この問題を克服するためのトリックを使用するかどうかはわかりません。

関連する問題