Java Persistence API の FetchType LAZY と EAGER の違いは何ですか? 質問する

Java Persistence API の FetchType LAZY と EAGER の違いは何ですか? 質問する

違いは何ですかFetchType.LAZYそしてFetchType.EAGERJava Persistence API では?

ベストアンサー1

2 つのエンティティがあり、それらの間に関係がある場合があります。たとえば、 というエンティティUniversityと という別のエンティティがありStudent、大学には多くの学生がいる場合があります。

University エンティティには、ID、名前、住所などの基本的なプロパティと、特定の大学の学生のリストを返す students というコレクション プロパティがあります。

大学には多くの学生がいる

public class University {
   private String id;
   private String name;
   private String address;
   private List<Student> students;

   // setters and getters
}

データベースから大学をロードすると、JPA は ID、名前、住所の各フィールドを自動的にロードします。ただし、学生をロードする方法には 2 つのオプションがあります。

  1. 残りのフィールドと一緒にロードする(つまり、積極的にロードする)、または
  2. 大学のgetStudents()メソッドを呼び出すときにオンデマンドで(つまり、遅延して)ロードします。

大学に多くの学生がいる場合、特に学生が必要ない場合に学生全員を一度にロードするのは効率的ではありません。そのような場合には、学生が実際に必要なときにロードするように宣言することができます。これを遅延ロードと呼びます。

students明示的に積極的にロードされるようにマークされている例を次に示します。

@Entity
public class University {

    @Id
    private String id;

    private String name;

    private String address;

    @OneToMany(fetch = FetchType.EAGER)
    private List<Student> students;

    // etc.    
}

students明示的に遅延ロードされるようにマークされている例を次に示します。

@Entity
public class University {

    @Id
    private String id;

    private String name;

    private String address;

    @OneToMany(fetch = FetchType.LAZY)
    private List<Student> students;

    // etc.
}

おすすめ記事