从PageRequest中禁用计数查询以获取总页数的方法?

ske*_*625 8 spring spring-data spring-data-jpa

我们正在将Spring Data与PageRequest一起使用,并使用大量数据.除了执行查询以获取总页数之外,所有查询都以最佳方式执行.有没有办法禁用此功能,还是我们很可能必须实现我们自己的Pageable?

http://static.springsource.org/spring-data/data-commons/docs/1.3.2.RELEASE/api/org/springframework/data/domain/PageRequest.html

http://static.springsource.org/spring-data/data-commons/docs/1.3.2.RELEASE/api/org/springframework/data/domain/Pageable.html

编辑: 经过进一步分析后,我认为解决这个问题的唯一方法是不使用Spring Data并使用EntityManager,因为它允许设置起始行和要返回的记录数.我们只需要下一页是否可用,所以我们只需要检索一条额外的记录.我们还需要一个动态查询,这在Spring Data中似乎是不可能的.

编辑2:似乎我没有等待足够长的时间来做出一些回应.多谢你们!!!

Oli*_*ohm 24

实现这一目标的方法仅仅是使用List返回值.例如,对于像这样定义的存储库:

interface CustomerRepository extends Repository<Customer, Long> {

  List<Customer> findByLastname(String lastname, Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)

查询执行引擎将应用offset和pagesize,Pageable但不会触发附加计数查询,因为我们不需要构造Page实例.这也记录在参考文档的相关部分中.

  • 对于查找所有查询,正确的方法签名是List findAllBy(Pageable)Oliver的提示[via github](https://github.com/mstahv/spring-data-vaadin-crud/commit/339693153d9edfb7a9391548ae07d605ea5e4214#commitcomment-10449759). (5认同)
  • 你好奥利弗,是否可以使用 findAll() 方法执行相同的操作?像 List&lt;T&gt; findAll(Pageable pageable) 这样的东西?(这样就可以生成类似以下内容:SELECT * FROM TABLE ORDER BY xxx LIMIT yyy)?我没有弄清楚如何做到这一点(并在这个帖子中与拉尔夫开始了一场“火焰之战”):-) (2认同)