Spring Data JPA - 编写复杂的查询方法

时间:2017-01-13 01:11:22

标签: java spring hibernate spring-data-jpa

我正在使用:Spring Data Repository + Hibernate

我有一个表格Post,字段为:User userBoardDate dateCreated

我有一个表格User,字段为:List<User> friends

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

  • 用户用户

  • 日期 dateCreated

  • 可分页页面

我想实现:

用户的用户朋友列表中按用户 +用户的所有帖子下载所有帖子,然后帖子的日期早于用户 date dateCreated 将收集的项目从最早的日期排序到所有这些,当然 - 页面页面

我知道我可以在没有原生查询的情况下实现此目的,因此请提供有关如何进行此操作的建议。我可以写一个简单的问题,但复杂的不再是原生查询。 谢谢你的帮助

1 个答案:

答案 0 :(得分:6)

以下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数据尚不支持。