7

Hibernateを使用してオブジェクトをロードする方法は2つしかないと思います。それは遅延ロードであり、1つは熱心なロードです。遅延読み込みには独自の利点があります。多くのオブジェクトを読み込むのではなく、必要な場合にのみ読み込みます。また、オブジェクトのすべての子を強制的にロードする場合は、を呼び出すだけでよいことも学びましたparent.getChildren().size()。したがって、次のオブジェクトがあるとしましょう

@Entity
public class Customer{
public Set<Order> order;
}

@Entity
public class Order{
}

私たちのシステムに注文がある顧客がいて、それが複数またはnullである可能性があると仮定しましょう。したがって、私の質問は、この場合は常に積極的な読み込みを使用する方が良いのではないでしょうか。顧客に関連する注文のサイズまたは情報が必要です。この状況で遅延読み込みを使用する利点は何ですか?何か利点はありますか?

遅延読み込みを使用する場所と熱心な読み込みを使用する場所を理解しようとしています。洞察に感謝します。

4

2 に答える 2

20

遅延読み込みを使用する場所と熱心な読み込みを使用する場所を理解しようとしています。洞察に感謝します。

ここにいくつかの考えがあります:

1)常に何かを使用する場合(確かに)、それを熱心にロードできます。
2)1に関連して、何かを使用することがほとんどない場合は、遅延ロードします。
3)大規模なコレクションが含まれる場合、遅延読み込みがより役立つ傾向があります。
4)物事を熱心にロードすると、パフォーマンスが低下する可能性がありますが、セッション関連のエラーが減少します。
5)複雑なデータモデルや大規模なデータベースの場合、負荷がかかった状態でアプリがどのように戦略を調整するかを確認します。
6)最初から正しく理解するのは難しい。正しいと感じることを行い、必要に応じて変更することを恐れないでください。
7)大規模なデータセットの場合、とにかくカスタムhql /クエリを作成することになります。デフォルトのマッピングは上書きされる可能性があるため、怠惰なものと熱心なものはそれほど重要ではありません。

#6を信じるなら、あまりにも先の計画を立てようとして立ち往生しないでください。必要に応じて変更してください。

あなたの特定の例をWRTすると、私はおそらくデータにアクセスするための一連のクエリを作成します(もちろん、適切なビジネスニーズによって駆動されます)

1)顧客をロードし、顧客情報を取得する必要があるときに呼び出すデータベースに注文を残すクエリ(遅延読み込み)
2)必要な場合に、顧客とすべての注文情報をロードするクエリそれ。したがって、この場合、デフォルトのマッピングを無視します。

これらの2つのクエリを実行すると、サービスレイヤーに、状況のコンテキストに基づいて正しいことを実行するために必要なツールがあります。

于 2012-09-24T16:56:55.510 に答える
5

このリンクはあなたの質問に完全に答えます。

LAZY読み込みは、関連するエンティティサイズが大きく、毎回フェッチする必要がない場合に使用されます。

EAGERは、メインエンティティが読み込まれるたびに関係を読み込むため、適切な分析とともに使用する必要があります。

したがって、ビジネスロジックの計算に関係が絶対に必要な場合は、EAGER読み込みを利用することを検討する必要があります。LAZY読み込みはほとんどの場合に役立ち、パフォーマンスの問題が少なくなります。

于 2012-09-24T16:55:45.160 に答える