0

JPA は初めてで、Spring で Hibernate を使用してサンプル アプリを作成しています。さまざまな投稿や Google から、LAZY fetch を実装する方法はほとんど見つかりませんでした。

  • 最も議論されているアプローチの 1 つは、ビュー パターンのオープン セッションのようですが、多くの人がこのアプローチのさまざまな欠点を挙げています。
  • 別のアプローチは、結合クエリ (例select p from Partner p join fetch p.contacts where...) を使用することです。

私が選択できる好ましい実装方法を説明してください。ありがとう。

4

1 に答える 1

2

良い方法は2番目の方法です。

ビューパターンでのオープンセッションは、一種のアンチパターンプラクティスです。これにより、JSP/サーブレットレベルでエンティティを変更する機会が与えられます。データの安全性は低く、プログラミングの習慣としては不適切です。

推奨される方法は、エンティティの遅延読み込みフィールドを使用する前に手動で読み込むか、HQLステートメントで予約語のフェッチを使用することです。ビューレイヤーで使用するデータは、事前に自分で知っておく必要があるので、使用する前にデータを準備/ロードするのは常識です。

遅延読み込みフィールドを事前に読み込む方法は次のとおりです。

  1. クエリ時にフィールド値を熱心に取得するようにフェッチモードを設定します

    Criteria.setFetchMode(文字列associationPath、FetchModeモード);

  2. プロキシフィールドを初期化するHibernate.initialize()メソッド。

  3. HQLステートメントにフェッチを追加します。

    emp fetch join on emp.deptasdeptとしてEmployeeからempを選択します。dept.nameは「HR」のようになります。

于 2013-03-06T13:58:15.870 に答える