我是Java持久性API和Hibernate的新手.
Java持久性API中FetchType.LAZY
和FetchType.EAGER
的区别是什么?
我是Java持久性API和Hibernate的新手.
Java持久性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、名称和地址字段.但是你有两种 Select 来 Select 如何加载学生:
getStudents()
方法时按需(即延迟)加载它.当一所大学有很多学生时,把所有的学生放在一起是没有效率的,特别是当他们不需要的时候,在这样的情况下,你可以声明你希望学生在真正需要的时候加载.这称为延迟加载.
下面是一个例子,其中students
被明确标记为Eager 地加载:
@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.
}