0

データ アクセスに JPA を使用する Java EE アプリケーションを作成しています。最初は EclipseLink を使用していましたが、Moxy 経由で依存するバンドルされた Geronimo Javamail 実装が奇妙な問題を引き起こし、Sun Javamail を強制的に使用することができなかったため、JPA プロバイダーとして Hiberate に切り替えました。

EclipseLink は、レイジー/イーガー アノテーションを無視し、熱心にすべてをロードしていました。Hibernate はこれらの注釈に注意を払うため、依存オブジェクトはロードされません。つまり、人の親の遅延読み込みを使用して人をロードすると、遅延読み込みではないビューで親にアクセスすると、データベースセッションが閉じているという例外が発生します。

これを回避するには 2 つの方法があることを理解しています。ビューが必要とするすべてのデータをロードするメソッド (これにより、さまざまな量のデータを取得するために多数のメソッドが重複してサービス層が乱雑になります)

参考までに、私のレイヤーは View -> Controller -> Service -> Entity Object -> JPA です。小さなアプリであり、DTO アンチパターンが好きではないので、dto は持っていません。

Open Session in View パターンについて考えると、問題は OpenSessionInViewInterceptor と OpenSessionInViewFilter がどちらも Hibernate 固有であり、どちらも Spring 構成ファイルで休止セッションを宣言する必要があることです。私は、persistence.xml ファイルで構成された純粋な JPA を使用することを好みます。

ここでのオプションは何ですか? Spring 構成を変更して Hibernate を明示的にロードし、アプリケーション内で純粋な JPA を使用することはできますか? ビューからの遅延ロードという同じ結果を達成する純粋なJPAの方法はありますか?

4

1 に答える 1

2
  • EclipseLink が標準の JPA アノテーションを無視するのは奇妙に思えます。
  • javamail の実装は、JPA に関連するものであってはなりません。
  • OpenEntityManagerInViewXJPAの同じシナリオを処理する(フィルター/インターセプター)があります
  • コレクションを賢く宣言して使用すれば、このパターンなしで簡単に行くことができます。
于 2012-07-23T20:45:08.323 に答える