Java持久化API中FetchType LAZY和EAGER的区别?

2023-12-13

有什么区别FetchType.LAZY and FetchType.EAGER在 Java 持久性 API 中?


有时您有两个实体,并且它们之间存在关系。例如,您可能有一个名为University另一个实体称为Student一所大学可能有很多学生:

University 实体可能具有一些基本属性,例如 id、姓名、地址等,以及名为 Students 的集合属性,该集合属性返回给定大学的学生列表:

A university has many students

public class University {
   private String id;
   private String name;
   private String address;
   private List<Student> students;

   // setters and getters
}

现在,当您从数据库加载大学时,JPA 会为您加载其 ID、名称和地址字段。但是对于如何加载学生,您有两种选择:

  1. 将其与其余字段一起加载(即急切地),或者
  2. 当您致电大学时按需(即延迟)加载它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(使用前将#替换为@)

Java持久化API中FetchType LAZY和EAGER的区别? 的相关文章

随机推荐