gpt4 book ai didi

java - 预加载是否加载所有相关对象?

转载 作者:行者123 更新时间:2023-11-30 22:11:44 25 4
gpt4 key购买 nike

假设我有 3 个实体

class User{
int idUser;
List<Story> stories;
}

class Story{
int idStory;
User idUser;
List<Comment> comments;
}

class Comment{
int idComment;
Story idStory;
}

如果我想在屏幕上显示所有用户并且所有这些对象都被急切地加载,这是否意味着在加载每个用户时我将首先加载他写的所有故事,然后在加载每个故事时我将加载所有评论发布了它等等?

还是会在加载故事时停止?

最佳答案

Hibernate 将完全按照您定义的方式进行抓取。

假设:

class User{
int idUser;
@OneToMany(fetch = FetchType.EAGER)
List<Story> stories;
}

class Story{
int idStory;
User idUser;
@OneToMany(fetch = FetchType.EAGER)
List<Comment> comments;
}

因此,当我们尝试加载 User 实体时,我们还将获取所有相关的 Story 实体,因为 User 类上的关联设置为急切获取。

此外,虽然 hibernate 将获取 Story 实体(因为前面提到过),但我们还将获取所有相关的 Comment 实体,同样,因为 Story 类上的关联设置为急切获取。

这将在尝试加载单个用户时执行。

但是,如果我们定义的不是:

class Story{
int idStory;
User idUser;
@OneToMany(fetch = FetchType.Lazy)
List<Comment> comments;
}

然后当我们尝试获取 User 实体时,我们只会急切地获取 Story 实体,而不会继续尝试获取 Comment 实体,因为它具有惰性获取。

在这种情况下,我们将在尝试访问 Comment 实体时获取它。

关于java - 预加载是否加载所有相关对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39911788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com