首页 > 解决方案 > 在一个查询中加载两个不相关的实体(没有任何命令)[Spring Data JPA]

问题描述

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

当前代码:

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

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

有没有办法这样做

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

请注意,用户和帖子都是不相关的,并且没有可以进行连接的公共列。

桑迪普

标签: javaspringhibernatespring-data-jpajpql

解决方案


您可以参考这个答案这篇文章以获得更好的解释。

我的经验很少,但我已经测试了这段代码,它适用于您的特定情况。

在 repo 文件中(我使用的是 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...
    }

推荐阅读