違いは何ですかFetchType.LAZY
そしてFetchType.EAGER
Java 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 つのオプションがあります。
- 残りのフィールドと一緒にロードする(つまり、積極的にロードする)、または
- 大学の
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.
}