有什么区别FetchType.LAZY and FetchType.EAGER在 Java 持久性 API 中?
有时您有两个实体,并且它们之间存在关系。例如,您可能有一个名为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、名称和地址字段。但是对于如何加载学生,您有两种选择:
- 将其与其余字段一起加载(即急切地),或者
- 当您致电大学时按需(即延迟)加载它
getStudents()
method.
当一所大学有很多学生时,将所有学生都装载在一起是没有效率的,特别是当不需要它们时,在这种情况下,您可以声明希望在实际需要时装载学生。这称为延迟加载。
这是一个例子,其中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.
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)