【问题标题】:Spring Data JPA - Writing a complex Query Method [closed]Spring Data JPA - 编写复杂的查询方法 [关闭]
【发布时间】:2017-01-13 01:11:21
【问题描述】:

我正在使用:Spring Data Repository + Hibernate

我有一张桌子:Post,字段:User userBoardDate dateCreated

我有一张桌子:User,字段:List<User> friends

对于这个问题我必须指定参数:

  • 用户用户

  • 日期创建日期

  • 可分页页面

我想实现:

下载 user 的所有帖子 + user 用户好友列表中用户的所有帖子,然后帖子的日期应早于日期 dateCreated 将收集的项目从最旧的日期排序到所有这些,当然-pages page

我知道我可以在没有本机查询的情况下实现这一点,所以请就如何去做。我可以写一个简单的问题,但复杂的不再是原生查询。 感谢您的帮助

【问题讨论】:

  • 考虑更改标题,因为您不想再创建原生查询。与其描述您的表/类,不如将源代码与您的映射一起发布。如果您已经有原生查询,也可以发布它。
  • 你当前的原生查询是什么?
  • 澄清一下,您使用的是 Spring Data JPA 吗?并且您正在寻找编写“查询方法”?请发布您的存储库(java 类)。
  • 不要描述你的代码。发布它。

标签: java spring hibernate spring-data-jpa


【解决方案1】:

以下 JPA 查询将按要求工作:

@Query("SELECT "
    + "  DISTINCT p "
    + "FROM "
    + "  Post p "
    + "INNER JOIN "
    + "  p.user.friends f "
    + "WHERE "
    + "  (p.user = ?1 OR f = ?1) "
    + "AND p.dateCreated < ?2")
Page<Post> findAllByUserOrFriendsAndDateCreated(User user
                                               , Date dateCreated
                                               , Pageable page);

然后调用这个方法为:

findAllByUserOrFriendsAndDateCreated(user
                                    , date
                                    , new PageRequest(pageNumber
                                                      , pageSize
                                                      , new Sort("dateCreated"));

Sample project 在 Github 上可用。

这个查询不能从方法名中生成,因为它需要将其中一个子句括在括号中,Spring Data 尚不支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2019-12-25
    • 2020-06-09
    • 2020-03-02
    • 2022-01-23
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多