说我有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类上的关联设置为热切获取。
另外,虽然休眠状态将获取Story实体(由于前面提到的内容),但我们还将再次获取所有相关的Comment实体,因为对Story类的关联设置为急于获取。
将在尝试加载单个用户时执行。
但是,如果不是我们定义的:
class Story{
int idStory;
User idUser;
@OneToMany(fetch = FetchType.Lazy)
List<Comment> comments;
}
那么当我们尝试获取User实体时,我们只会热切地获取Story实体,而不会继续尝试获取Comment实体,因为它具有延迟获取功能。
在这种情况下,我们将尝试访问Comment实体。