JPA を使用したコードがあり、開発環境と単体テストですべて正常に動作します。しかし、私のモジュールを OSGi ターゲット環境にデプロイすると、最も奇妙なクラスのロードの問題に定期的に遭遇します。私は OSGi が本当に好きですが、これを完全に修正できない場合は、ひどく狂ってしまいます。そして、どのクラスが他のどのクラスから見える必要があるかを理解していない限り、OSGi を適切にセットアップすることはできません。
したがって、私が見る限り、実行中のコードの一部から見える場合と見えない場合がある次の項目があります。それらを「サブジェクト」と呼びましょう。
- JPA アノテーション付きエンティティークラス
- a
persistence.xml
- の持続性 API
javax.persistence
- 永続化プロバイダ クラス
そして、私のコードには次のような状況があります:
- とを作成
EntityManagerFactory
するEntityManager
- 新しいエンティティ オブジェクトをインスタンス化する
- これらのオブジェクトを に渡し
EntityManager
て、永続化コンテキストに入れます - それらを使用し続け、時々 EntityManager に変更を保存するように依頼します
- エンティティ オブジェクトをデータベースに保存したり、明示的に EntityManager のメソッドを呼び出したりせずにインスタンス化、使用、および破棄する
- エンティティ オブジェクトをインスタンス化する代わりに、EM にデータベースからそれらをロードするように依頼します。これにより、インスタンス化が見えない場所で発生します。
- これらのインスタンスの使用、変更、保存、破棄
では、上記のどの状況で、どの被写体を表示する必要があるのでしょうか?
おそらくそれは明らかだと思います
- 持続性プロバイダーとエンティティークラスは、javax.persistence を認識している必要があります
- EntityManager を作成するコードは、javax.persistence を参照する必要があります (そして、永続化プロバイダーを推測しますが、それは私自身のコードのいずれにも直接表示されません)。