遅延フェッチ (または初期化) は、熱心なフェッチの反対です。hibernate のデフォルトである遅延フェッチは、レコードがデータベースからロードされるときに、1 対多の関係の子行がロードされないことを意味します。例えば
@Entity
@Table(name = "COMPANY")
public class Company {
...
@OneToMany(fetch = FetchType.LAZY)
private Set<Employee> employees = new HashSet<Employee>();
会社のレコードを要求しても従業員は返されません (設定されません)。従業員は別のクエリで要求する必要があります。
利点
- パフォーマンス。従業員は、必要なとき (および要求されたとき) にのみ読み込まれます。CPU、メモリ、帯域幅の利点... (Java 側と SQL サーバー側の両方)。
欠点
- Employees も必要な場合は、別のクエリを実行する必要があります。
Employees に対するクエリは、同じセッション中に実行する必要があることに注意してください (そうしないと、有名なLazyInitializationExceptionは歓迎されません)。
このページには興味深い情報が掲載されています。