Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否加载所有相关对象?_Java_Mysql_Hibernate_Spring Data Jpa - Fatal编程技术网

Java 是否加载所有相关对象?

Java 是否加载所有相关对象?,java,mysql,hibernate,spring-data-jpa,Java,Mysql,Hibernate,Spring Data Jpa,假设我有3个实体 class User{ int idUser; List<Story> stories; } class Story{ int idStory; User idUser; List<Comment> comments; } class Comment{ int idComment; Story idStory; } 类用户{ int idUser; 列举故事; } 课堂故事{ 国际数据库; 用户idUser; 列出评论;

假设我有3个实体

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

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

class Comment{
  int idComment;
  Story idStory;
}
类用户{
int idUser;
列举故事;
}
课堂故事{
国际数据库;
用户idUser;
列出评论;
}
课堂评论{
国际评论;
故事情节;
}
如果我想在屏幕上显示所有用户,如果所有这些对象都被急切地加载,这是否意味着在加载每个用户时,我将首先加载他写的所有故事,在加载每个故事时,我将加载为其发布的所有评论,依此类推


或者它只是在加载故事时停止吗?

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;
}
类用户{
int idUser;
@OneToMany(fetch=FetchType.EAGER)
列举故事;
}
课堂故事{
国际数据库;
用户idUser;
@OneToMany(fetch=FetchType.EAGER)
列出评论;
}
所以,当我们尝试加载用户实体时,我们还将获取所有相关的故事实体,因为用户类上的关联设置为“急切地获取”

另外,虽然hibernate将获取故事实体(因为前面提到过),但我们也将获取所有相关的注释实体,因为Story类上的关联设置为热切地获取

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

但是,如果我们没有定义:

class Story{
  int idStory;
  User idUser;
  @OneToMany(fetch = FetchType.Lazy)
  List<Comment> comments;
}
课堂故事{
国际数据库;
用户idUser;
@OneToMany(fetch=FetchType.Lazy)
列出评论;
}
然后,当我们尝试获取用户实体时,我们只会急切地获取故事实体,,而不会继续尝试获取注释实体,因为它具有延迟获取


在本例中,我们将在尝试访问注释实体时获取注释实体。

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;
}
类用户{
int idUser;
@OneToMany(fetch=FetchType.EAGER)
列举故事;
}
课堂故事{
国际数据库;
用户idUser;
@OneToMany(fetch=FetchType.EAGER)
列出评论;
}
所以,当我们尝试加载用户实体时,我们还将获取所有相关的故事实体,因为用户类上的关联设置为“急切地获取”

另外,虽然hibernate将获取故事实体(因为前面提到过),但我们也将获取所有相关的注释实体,因为Story类上的关联设置为热切地获取

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

但是,如果我们没有定义:

class Story{
  int idStory;
  User idUser;
  @OneToMany(fetch = FetchType.Lazy)
  List<Comment> comments;
}
课堂故事{
国际数据库;
用户idUser;
@OneToMany(fetch=FetchType.Lazy)
列出评论;
}
然后,当我们尝试获取用户实体时,我们只会急切地获取故事实体,,而不会继续尝试获取注释实体,因为它具有延迟获取


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

如果您在故事实体/命名查询中这样设置注释,则将加载注释。:)如果您在故事实体/命名查询中设置了注释,则将加载注释。:)