Java 是否加载所有相关对象?
假设我有3个实体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; 列出评论;
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)
列出评论;
}
然后,当我们尝试获取用户实体时,我们只会急切地获取故事实体,,而不会继续尝试获取注释实体,因为它具有延迟获取
在这种情况下,我们将在尝试访问注释实体时获取注释实体。如果您在故事实体/命名查询中这样设置注释,则将加载注释。:)如果您在故事实体/命名查询中设置了注释,则将加载注释。:)