0

Spring Frameworkを使用しており、ジャージを介してアプリケーションのサービスレイヤーと直接通信するサイトをセットアップしています。モデル内の特定のものが(必要に応じて)遅延ロードされるシナリオに遭遇していますが、モデルにモデルをフェッチするように指示するサービスまたはdao内で「スイッチを切り替える」ことができるようにしたいと考えています。熱心に、必要な関係を取得するために大量のコードを記述する必要はありません。

これは可能ですか?

4

2 に答える 2

2

たとえば、Criteria's FetchMode:を使用してこれをオーバーライドできます。

List parents = session.createCriteria(Parent.class)
.add( Restrictions.like("prop", value) )
.setFetchMode("childs", FetchMode.EAGER)
.list();

これにより、デフォルトで遅延フェッチされた場合でも、子プロパティコレクションが熱心読み込まれます。

于 2013-03-15T16:34:23.050 に答える
0

私はあなたのためにこれを行うビルド済みのものを知りませんし、それをググる気もしませんが、あなたがコーディングできるセットアップを想像することができます...

  • 前後に反転したいPOJO用のロード可能なインターフェース...
  • すべてのクラススロットをラップするスロットクラス。スロットには、スロットにロードするように指示するメソッドSlot.load()を含めることができます。本来、Slotは遅延読み込みを行います。このクラスを正しく実行するには、多くの時間と多くのサブクラスが必要になる場合があります...
  • いつロードするかをスロットに指示することを目的としたSlotLoader抽象クラス。抽象メソッドonAssign()があります。ローダーをスロットに割り当て、onAssignを呼び出すfinalメソッドassign(Slot slot)があります。
  • LazyLoaderクラスはSlotLoaderを実装します。onAssign()が呼び出されたときは、何もしません
  • EagerLoaderクラスはSlotLoaderを実装します。onAssign()が呼び出されると、slot.load()が呼び出されます。

前後に切り替えたいすべてのメソッドは、スロットをSlotでラップするように再コーディングする必要があり、Spring構成では、LazyLoaderとEagerLoaderのどちらを使用するかを知る必要があります。

于 2013-03-15T16:37:06.673 に答える