Java Spring数据JPA与集合的延迟抓取
我有一个用户实体和一套汽车(oneToMany)。我还有一个方法: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
@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);我写这篇文章是因为其他人可能有这个问题