【问题标题】:Getting wrong number of pages in Spring Boot在 Spring Boot 中获取错误的页数
【发布时间】: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&lt;Teacher&gt; teacher, Pageable pageable)。 Spring Data 将为您创建两个查询。还要确保您确实设置了正确的页面大小(看起来您在传递的Pageable 中仍然有默认值 10)。
  • @M.Deinum 更新了查询。另外,如果我们将分页与 Join fetch 一起使用,我们必须提到 countQuery。
  • 检查JOIN FETCH查询和COUNT查询记录数相同。
  • @SaiYeYanNaingAye 我们不能在计数查询中使用 JOIN fetch。这种情况我该怎么办?
  • @Abhishek 我的意思是请检查第一个查询给出多少条记录。第二个计数查询给出了多少条记录。我怀疑这两个查询的计数不同

标签: java spring-boot paging


【解决方案1】:
SELECT DISTINCT s 
FROM Students s JOIN FETCH s.Teachers 
WHERE s.Teachers IN (:Teachers)
SELECT count(DISTINCT s) 
FROM Students s
WHERE s.Teachers IN (:Teachers)

让我们看看

FROM Students s JOIN Teachers

不同
FROM Students s WHERE s.Teachers IN (:Teachers)

因此,pageNumber 错误。

【讨论】:

  • 保持 2 个查询是相似的。也许countQuery = SELECT count(DISTINCT s) FROM Students s WHERE s.Teachers IN (:Teachers)"你应该自己测试,因为我没有数据库。
猜你喜欢
  • 1970-01-01
  • 2019-07-26
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多