Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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/2/spring/13.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 Spring数据JPA与集合的延迟抓取_Java_Spring_Hibernate_Jpa_Spring Data - Fatal编程技术网

Java Spring数据JPA与集合的延迟抓取

Java Spring数据JPA与集合的延迟抓取,java,spring,hibernate,jpa,spring-data,Java,Spring,Hibernate,Jpa,Spring Data,我有一个用户实体和一套汽车(oneToMany)。我还有一个方法: @Transactional(readOnly = true) public Optional<User> getUserWithCars(Long id) { return userRepository.findOneById(id).map(u -> { u.getCars().size(); return u; }); } @Transactional(r

我有一个用户实体和一套汽车(oneToMany)。我还有一个方法:

@Transactional(readOnly = true)
public Optional<User> getUserWithCars(Long id) {
    return userRepository.findOneById(id).map(u -> {
        u.getCars().size();
        return u;
    });
}
@Transactional(readOnly=true)
公共可选getUserWithCars(长id){
返回userRepository.findOneById(id).map(u->{
u、 getCars().size();
返回u;
});
}
懒散的抓取很好用。但如果我必须带着车去接一组用户呢?我尝试使用users.forEach(u->u.getCars().size());但收到了一个流行的无会话例外

另外,我需要延迟获取,而不是急切获取。

在存储库中:

@Query("SELECT u FROM User u LEFT JOIN FETCH u.cars")
public Set<User> getUserWithCars()
@Query(“从用户u左键选择u左键加入获取u.cars”)
公共设置getUserWithCars()

在spring data jpa中,您可以编写查询方法

Optional<User> findFirstWithCarsById(Long id);
可选findFirstWithCarsById(长id);

要了解更多信息,请查看

这听起来是一个合理的地方,可以编写一个从服务器返回计数的查询,而不是在您提前知道需要什么时调用大量往返。我不明白您的意思。我必须创建一个方法,从数据库中获取所有用户的cats,然后返回它们。我需要它在控制器中使用。我获取单个用户的方法也很有效。我需要一种用汽车取回电视机的方法。我更新了答案。希望它能解释,但我不确定我是否正确理解你。例如,我的数据库中有两个用户。每个用户有2辆车。我需要一个方法,使2个用户与他们的汽车。方法返回一个包含2个用户的集合,每个用户都有一组汽车(在我们的例子中,每个用户有2辆汽车)。如果
user
实体中的
cars
字段是一个集合,那么我的方法将为
cars
获取一个嵌入
set
集合。但是getUserWithCars从存储库返回可选的,而不是set。如何获取所有用户?为什么服务层中的方法有一个id作为参数?这个方法应该返回所有用户,而不是只返回一个id。我需要查询一个用户集合,而不是单个用户。但是,问题解决了。@Feeco这一个也是可能的列表findWithCarsById(长id);我写这篇文章是因为其他人可能有这个问题