【发布时间】:2021-01-17 00:46:32
【问题描述】:
我在 Spring Boot 中进行分页。我的列表上有 32 条记录。我试图在页面大小为 5 的页面中获取这些列表。当我检查从 0 到 3 的页面时,我得到了正确的总元素(每页 5 个)。但是当我检查最后一页时,它在列表中减少了一个元素(最后一页上的 1 个元素,但它应该返回 2),并且元素的总数减少了一个。
@Query(value = "SELECT DISTINCT s FROM Students s JOIN FETCH s.Teachers WHERE s.Teachers IN (:Teachers)", countQuery = "SELECT count(DISTINCT s) FROM Students s" +
" WHERE s.Teachers IN (:Teachers)")
Page<Students> findByStd(@Param("Teachers") List<Teacher> Teacher, Pageable pageable);
【问题讨论】:
-
要么您在查询中打错字,要么就是不正确。在您的查询中,您指的是
b而在您的计数中,您指的是s。还有为什么提供这两个查询为什么不简单地使用findByTeachersIn(List<Teacher> teacher, Pageable pageable)。 Spring Data 将为您创建两个查询。还要确保您确实设置了正确的页面大小(看起来您在传递的Pageable中仍然有默认值 10)。 -
@M.Deinum 更新了查询。另外,如果我们将分页与 Join fetch 一起使用,我们必须提到 countQuery。
-
检查JOIN FETCH查询和COUNT查询记录数相同。
-
@SaiYeYanNaingAye 我们不能在计数查询中使用 JOIN fetch。这种情况我该怎么办?
-
@Abhishek 我的意思是请检查第一个查询给出多少条记录。第二个计数查询给出了多少条记录。我怀疑这两个查询的计数不同
标签: java spring-boot paging