我正在使用:Spring Data Repository + Hibernate
我有一个表格Post
,字段为:User userBoard
和Date dateCreated
我有一个表格User
,字段为:List<User> friends
对于我必须指定参数的问题:
用户用户
日期 dateCreated
可分页页面
我想实现:
在用户的用户朋友列表中按用户 +用户的所有帖子下载所有帖子,然后帖子的日期早于用户 date dateCreated 将收集的项目从最早的日期排序到所有这些,当然 - 页面页面
我知道我可以在没有原生查询的情况下实现此目的,因此请提供有关如何进行此操作的建议。我可以写一个简单的问题,但复杂的不再是原生查询。 谢谢你的帮助
答案 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数据尚不支持。