我是Java持久性API和Hibernate的新手.

Java持久性API中FetchType.LAZYFetchType.EAGER的区别是什么?

推荐答案

有时你有两个实体,它们之间有一种关系.例如,您可能有一个名为University的实体和另一个名为Student的实体,一所大学可能有许多学生:

大学实体可能有一些基本属性,如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、名称和地址字段.但是你有两种 Select 来 Select 如何加载学生:

  1. 将其与田间地头的睡觉一起加载(即Eager 地),或者
  2. 在调用大学的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.
}

Java相关问答推荐

在现有Json文件中添加新记录

将状态栏和导航栏设置为白色,带有深色文本

为什么一个java函数会返回一个作为参数传递给它的对象?

为什么我们不能实现两个接口,其中一个接口有相同的签名,其中一个接口有默认的实现在java?'

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

相同的Java SerializedLambda为implMethodKind返回不同的结果

蒙蒂霍尔比赛结果不正确

try 判断可选参数是否为空时出现空类型安全警告

MimeMessage emlMessage=new MimeMessage(Session,emlInputStream);抛出InvocationTargetException

如何将Pane的图像快照保存为BMP?

Instancio未在日志(log)中显示测试失败消息

与IntArray相比,ArrayList<;Int>;对于大量元素的性能极差

在Spring Boot应用程序中,server.port=0的默认端口范围是多少?

Spring Framework6.1中引入的新RestClient是否有适合于测试的变体,就像RestTemplate和TestRestTemplate一样?

在缺少字段时使用Jackson With Options生成Optional.Empty()

Java集合:NPE,即使没有添加空值

Kotlin-仅替换字符串中最后一个给定的字符串

PhantomReference无法访问时会发生什么?

";重复键的值提示唯一约束«;livre_genre_pkey»";例外