専門の開発者が、メモリを節約するために永続化されたエンティティをLAZY ロードするようにアドバイスしている場所をよく見かけます。
概念は非常に明確です。使用しない大量の情報をロードしても意味がありません。
しかし、私の日常の経験では、このベスト プラクティスを適用するのは簡単なことではありません。つまり、依存関係を定義する場合、たとえば aDEPARTMENT
と an の間の 1 対多の関係を考えてみましょう。ビジネス ロジックでを処理するときに、従業員のリストが必要EMPLOYEE
になる可能性が非常に高くなります。これはよくあることで、私はほとんどの場合 EAGER ロードを使用しています。Department
プログラムの観点から、私ができる最善のことは、そのようなフラグを付けて Dao メソッドを出荷することです
public Department getDepartment(String departmentName, boolean eagerly)
ここで、eagerly
に設定された属性true
が Department の完全な読み込みをトリガーします (これはデフォルトで LAZY 読み込みです。getEmployees()
トランザクション内で呼び出して、従業員リストを読み込みます)。
問題をどのように処理しますか?LAZY ローディングは快適ですか?もしそうなら、私は何かが欠けていますか?
編集:
@Ayman の説明によると、休止状態を使用した次のアプローチについて説明したいと思います。
public class Node {
private Node parent;
private Set<Node> children;
public getParent(){
if(parent==null)
return Hibernate.initialize(parent);
return parent;
}
public getChildren(){
if(children==null)
return Hibernate.initialize(children);
return children;
}
}
それは受け入れられる実装ですか?欠点は何ですか?