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

标签 java spring hibernate spring-data-jpa

<分区>

我正在使用:Spring Data Repository + Hibernate

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

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

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

  • 用户用户

  • 创建日期dateCreated

  • 可分页页面

我想实现:

下载用户的所有帖子+用户的用户好友列表中用户的所有帖子,然后帖子的日期早于日期dateCreated 对收集的项目从最旧的日期到所有这些进行排序,当然是页面 page

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

最佳答案

以下 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 尚不支持这一点。

关于java - Spring Data JPA - 编写复杂的查询方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41625874/

相关文章:

java - Cobertura 不识别经过充分测试的类

java - Hibernate通过@Query获取数据时不读取@Column

java - 在java中为系统外观添加一些东西

Java并发访问字段,不使用 volatile 的技巧

java - 调用init方法失败;嵌套异常是 org.hibernate.AnnotationException : mappedBy reference an unknown target entity property:

java - Hibernate 映射理解

java - EJB 3事务回滚问题

Java 8 流合并内部流结果到上面的流

java - 我正在使用 hibernate 4.3.8 和 swing 应用程序并获取 org.hibernate.service.UnknownServiceException

java - 在 Spring 中使用 System 覆盖属性