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

5
我正在使用:Spring Data Repository + Hibernate 我有一个表:Post,其中包括字段:User userBoard和Date dateCreated。
我有一个表:User,其中包括字段:List friends。
对于这个问题,我需要指定以下参数:
- User user - Date dateCreated - Pageable page 我想要实现的功能是:下载所有由user发布的帖子+用户朋友列表中的所有用户发布的帖子,然后按照早于dateCreated的日期排序收集所有这些内容。当然,还需要分页page。
我知道可以在不使用原生查询的情况下实现此功能,请给出具体建议。对于简单的查询我能够自己写,但对于复杂查询就无法做到了。谢谢您的帮助。

3
考虑更改标题,因为您不再想创建本地查询。不要描述您的表/类,而是发布包含映射的源代码。如果您已经有了本地查询,请同时发布它。 - Dominik Kunicki
你当前的本地查询是什么? - alexbt
请澄清一下,您正在使用Spring Data JPA?并且您想编写一个“查询方法”?请发布您的Repository(Java类)。 - alexbt
1
不要描述你的代码,把它发布出来。 - JB Nizet
1个回答

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"));

Github上有示例项目

这个查询无法通过方法名生成,因为它需要将其中一个子句括在括号中,而Spring Data目前不支持这种操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接