猿问

在一个查询中加载两个不相关的实体

如何使用 spring 数据 jpa 在一个查询中加载两个不相关的实体,没有共同点?

当前代码:

 User user = userRepo.findOne(userId);
 
  Post post = postRepo.findOne(postId);

这创建了两个sql查询有什么办法可以做到1个查询。

有没有办法这样做

  Object[] userAndPost = someRepo.findUserAndPost(userId, postId);

请注意 user 和 post 都是不相关的,并且没有可以进行 join 的公共列。


慕妹3146593
浏览 121回答 1
1回答

叮当猫咪

你可以参考这个答案和这篇文章以获得更好的解释。我的经验很少,但我已经测试了这段代码,它适用于您的特定情况。在 repo 文件中(我使用的是 Spring Boot):@Repositorypublic interface UserDao extends JpaRepository<User, Long> {&nbsp; &nbsp;@Query("select u, p from User u, Post p where u.id =:userId and p.id =:postId")&nbsp; &nbsp;List<Object[]> findUserAndPost(@Param("userId") Long userId, @Param("postId") Long postId);}然后,要测试它是否有效,您可以尝试以下代码:&nbsp; &nbsp; List<Object[]> results = userDao.findUserAndPost(userId, postId);&nbsp; &nbsp; for (int i = 0; i < results.size(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; User user = (results.get(i)[0] instanceof User) ? (User) results.get(i)[0] : null;&nbsp; &nbsp; &nbsp; &nbsp; Post post = (results.get(i)[1] instanceof Post) ? (Post) results.get(i)[1] : null;&nbsp; &nbsp; &nbsp; &nbsp; // Do whatever with user and post...&nbsp; &nbsp; }
随时随地看视频慕课网APP

相关分类

Java
我要回答