1

状況はこれです:

  • 遅延読み込みが定義されたオブジェクトグラフを持つHibernateコンテキストがあります。
  • データをどこかにコピーせずに、UIでHibernateオブジェクトをそのまま使用する必要があります。
  • さまざまな量のデータを必要とするさまざまなUIコンテキストがあります。
  • データが大きすぎるため、毎回グラフ全体を熱心にロードすることはできません。

より多くのデータをロードするためにデータベースに戻る必要なしにアクセスできるように、構成可能な方法でオブジェクトグラフ内のすべての適切なオブジェクトをロードするための最良の手段は何ですか?

どんな助けでも。

4

3 に答える 3

2

あなたがクライアントを持っていて、ある時点で彼の注文で何かをしなければならないとしましょう。おそらく彼は彼の注文に対してボーナスを持っています。

次に、次のようなことができる流暢なインターフェースを備えたリポジトリを定義します。

new ClientRepo().LoadClientBy(id)
                .WithOrders()
                .WithBonus()
                .OrderByName();

そして、必要なものがすべて揃ったクライアントがそこにあります。現在の操作に必要なものを事前に知っておくことをお勧めします。このようにして、データベースへの不要なトリップを回避できます (チームの新しい開発者は通常これを行います - プロパティを呼び出しますが、それが実際には DB への呼び出しであるという事実を認識していません)。

于 2008-09-17T04:19:52.180 に答える
1

プロジェクトで使用するアプローチは、ビューごとにサービスを作成することです。次に、ビューは、この特定のビューに必要なサブグラフをフェッチし、データベースに送信される sql の数を常に削減しようとします。したがって、n:1 の関連オブジェクトを取得するために多くの結合を使用しています。

DB に直接接続された 2 層のデスクトップ アプリを使用している場合は、オブジェクトをアタッチしたままにして、追加のデータをいつでも自動的にロードできます。それ以外の場合は、セッションに再アタッチし、必要な関連付けを初期化する必要がありますHibernate.initialize(Object entity, String propertyName)

(メモリ不足、100% 正しくない可能性があります)

于 2008-09-17T20:12:01.863 に答える
1

それが Web アプリケーションであり、Spring を使用している場合、OpenSessionInViewFilter が問題の解決策になる可能性があります。

于 2008-09-17T05:00:17.997 に答える