我是Java永續性API和Hibernate的新手.
在Java永續性API中, FetchType.LAZY
和 FetchType.EAGER
有什麼區別?
有時候您有兩個實體,它們之間有一個關係.例如,您可能有一個名為University
的實體,另一個名為Student
的實體,大學可能有很多學生:
大學實體可能有一些基本屬性,如id、姓名、地址等,以及一個稱為學生的收藏財產,這些財產將返回給定大學的學生名單:
public class University {
private String id;
private String name;
private String address;
private List<Student> students;
// setters and getters
}
現在,當從資料庫載入大學時,JPA為您載入其id,名稱和地址欄位.但是對於如何載入學生有兩個選項:
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.
}