Java Persistence API中的FetchType LAZY和EAGER之间的区别?

Java Persistence API中的FetchType LAZY和EAGER之间的区别?,第1张

Java Persistence API中的FetchType LAZY和EAGER之间的区别?

有时你有两个实体,并且它们之间存在关系。例如,你可能有一个名为的实体

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,名称和地址字段。但是,对于如何加载学生,你有两个选择:

  1. 要将其与其余字段一起加载(即急切地),或者
  2. 在调用大学
    getStudents()
    方法时按需(即懒惰地)加载它。
    当一所大学有很多学生时,将所有学生与其一起加载是没有效率的,尤其是在不需要他们的情况下,在这种情况下,你可以声明希望在实际需要他们的时候加载学生。这称为延迟加载。

这是一个示例,其中

students
已明确标记为急切加载:

@Entitypublic class University {    @Id    private String id;    private String name;    private String address;    @oneToMany(fetch = FetchType.EAGER)    private List<Student> students;    // etc.    }

这是一个示例,其中

students
显式标记为延迟加载:

@Entitypublic class University {    @Id    private String id;    private String name;    private String address;    @oneToMany(fetch = FetchType.LAZY)    private List<Student> students;    // etc.}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5014197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存