我是 Java Persistence API 和 Hibernate 的新手。
Java Persistence APIFetchType.LAZY和in之间有什么区别?FetchType.EAGER
FetchType.LAZY
FetchType.EAGER
有时您有两个实体,并且它们之间存在关系。例如,您可能有一个名为的实体University和另一个名为的实体Student,而大学可能有许多学生:
University
Student
University 实体可能具有一些基本属性,例如 id、name、address 等,以及一个名为 students 的集合属性,该属性返回给定大学的学生列表:
public class University { private String id; private String name; private String address; private List<Student> students; // setters and getters }
现在,当您从数据库中加载大学时,JPA 会为您加载其 id、name 和 address 字段。但是对于如何加载学生,您有两种选择:
getStudents()
当一所大学有很多学生时,将所有学生一起加载是没有效率的,尤其是当他们不需要时,在这种情况下,您可以声明您希望学生在实际需要时加载。这称为延迟加载。
这是一个示例,其中students明确标记为急切加载:
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. }