【问题标题】:Loading Two Unrelated Entities (nothing in comman) in One Query [Spring Data JPA]在一个查询中加载两个不相关的实体(没有共同点)[Spring Data JPA]
【发布时间】:2019-01-15 08:42:54
【问题描述】:

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

当前代码:

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

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

有没有这样的方法

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

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

桑迪普

【问题讨论】:

    标签: java spring hibernate spring-data-jpa jpql


    【解决方案1】:

    您可以参考this answerthis post 以获得更好的解释。

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

    在 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...
        }
    

    【讨论】:

    • 太棒了!这是我的第一个答案,我很高兴它有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2013-11-27
    • 2016-05-02
    相关资源
    最近更新 更多