【问题标题】:How to get all results in one page using Spring Data Pagination如何使用 Spring Data Pagination 在一页中获取所有结果
【发布时间】:2017-06-22 13:38:36
【问题描述】:

我想在单页中获取所有结果,我已经尝试过

Pageable p = new PageRequest(1, Integer.MAX_VALUE);
return customerRepository.findAll(p);

上述方法无效,有什么方法可以实现吗?似乎无法通过 here 询问的自定义查询来实现。

【问题讨论】:

  • 那你为什么还要使用分页呢? 0 有意义。
  • 是的,你是对的..但我正在尝试制作一个 api..有时它只是要求所有数据(使用不同的搜索查询)..但应该显示在使用的表中也适用于不同时间的分页结果。所以我想保持响应格式不变。

标签: java spring spring-data spring-data-jpa spring-repositories


【解决方案1】:

更正确的方法是使用Pageable.unpaged()

Pageable wholePage = Pageable.unpaged();
return customerRepository.findAll(wholePage);

【讨论】:

  • 这应该是公认的答案!谢谢
  • 但是我还是想排序,怎么办?
  • @Legna 您可以在存储库方法中发送排序参数。 petrikainulainen.net/programming/spring-framework/… 。 org.springframework.data.domain.Sort; myRepository.findAll(sortByIdAsc());并通过 new Sort(Sort.Direction.ASC, "id");
  • @MohammedIdris,我的意思是 Pageable.unpaged() 不允许排序。我的问题与使用 Pageable.unpaged() 的建议严格相关
  • here
【解决方案2】:

您的页面请求不正确,因为您在错误的页面上查找结果。应该是:

PageRequest.of(0, Integer.MAX_VALUE);

结果的第一页是 0。由于您要返回所有记录,因此它们都在此页面上。

【讨论】:

  • 这个答案并不完美。您将获得 1000 的最大页面大小限制,这意味着当您的项目大于 1000 时,您将无法获得所有结果。
  • @MaxPeng 这高度依赖于数据存储类型。而且问题几乎与数据存储无关。
  • @BranislavLazic 好吧,我的意思是 spring 数据本身有一个小陷阱,可能会覆盖您传入的最大页面大小,请参阅 github.com/spring-projects/spring-data-rest/blob/master/…
  • 目前已弃用。你需要使用PageRequest.of(0, Integer.MAX_VALUE)
  • 将结果的第一页设为 1 的最简单方法是什么?
【解决方案3】:

如果您为 Pageable 传递 null,Spring 将忽略它并带来所有数据。

Pageable p = null;
return customerRepository.findAll(p);

【讨论】:

    【解决方案4】:

    从 spirng-data-commons@2.1.0 开始,正确的语法是 PageRequest.of(0, Integer.MAX_VALUE)。 你可以看here

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 2013-11-28
      • 2013-03-22
      • 2020-11-17
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      相关资源
      最近更新 更多