如何使用Spring Data Pagination在一个页面中获取所有结果

Ruw*_*han 15 java spring spring-data spring-data-jpa spring-repositories

我希望在单页中获得所有结果,我已尝试过

Pageable p = new PageRequest(1, Integer.MAX_VALUE);
return customerRepository.findAll(p);
Run Code Online (Sandbox Code Playgroud)

以上是行不通的,有没有办法实现这个?似乎无法通过此处询问的自定义查询实现.

Bra*_*zic 30

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

new PageRequest(0, Integer.MAX_VALUE);
Run Code Online (Sandbox Code Playgroud)

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

  • 这个答案并不完美.您将获得最大页面大小限制1000,这意味着当您的项目大于1000时,您将无法获得所有结果. (3认同)
  • 到现在为止不推荐使用。您需要使用`PageRequest.of(0,Integer.MAX_VALUE)` (3认同)
  • @BranislavLazic嗯,我的观点是spring数据本身有一个小陷阱,可能会覆盖你传入的最大页面大小,请参阅https://github.com/spring-projects/spring-data-rest/blob/master/弹簧数据静止芯/ SRC /主/ JAVA /组织/ springframework的/数据/休息/核心/配置/ RepositoryRestConfiguration.java#L50 (2认同)

小智 28

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

Pageable wholePage = Pageable.unpaged();
return customerRepository.findAll(wholePage);
Run Code Online (Sandbox Code Playgroud)

  • 但我还是想排序,该怎么做呢? (2认同)

Kar*_*ose 6

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

Pageable p = null;
return customerRepository.findAll(p);
Run Code Online (Sandbox Code Playgroud)