Java Persistence API中的FetchType LAZY和EAGER之间的区别?
2022-08-31 04:09:26
我是Java Persistence API和Hibernate的新手。
Java Persistence API中的FetchType.LAZY
和FetchType.EAGER
有什么区别?
我是Java Persistence API和Hibernate的新手。
Java Persistence API中的FetchType.LAZY
和FetchType.EAGER
有什么区别?
有时你有两个实体,它们之间有关系。例如,您可能有一个名为的实体和另一个称为“大学”的实体,并且“大学”可能有许多“学生”:University
Student
大学实体可能具有一些基本属性(如 id、名称、地址等),以及一个名为 students 的集合属性,该属性返回给定大学的学生列表:
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.
}
基本上
LAZY = fetch when needed
EAGER = fetch immediately