如何使用spring数据jpa将两个不相关的实体(没有共同点)加载到一个查询中?
当前代码:
User user = userRepo.findOne(userId);
Post post = postRepo.findOne(postId);
这将创建两个sql查询,有什么方法可以做到1个查询。
有什么办法做
Object[] userAndPost = someRepo.findUserAndPost(userId, postId);
请注意,用户和帖子都不相关,并且没有共同的列可以加入。
山地
答案 0 :(得分:0)
您可以参考this answer和this post以获得更好的解释。
我经验很少,但是我已经测试了这段代码,它适用于您的特定情况。
在回购文件中(我正在使用Spring boot):
@Repository
public interface UserDao extends JpaRepository<User, Long> {
@Query("select u, p from User u, Post p where u.id =:userId and p.id =:postId")
List<Object[]> findUserAndPost(@Param("userId") Long userId, @Param("postId") Long postId);
}
然后,要测试是否可行,可以尝试以下代码:
List<Object[]> results = userDao.findUserAndPost(userId, postId);
for (int i = 0; i < results.size(); i++) {
User user = (results.get(i)[0] instanceof User) ? (User) results.get(i)[0] : null;
Post post = (results.get(i)[1] instanceof Post) ? (Post) results.get(i)[1] : null;
// Do whatever with user and post...
}