说我有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实体。

10-07 19:17
查看更多