JPA Criteria api-分页内具体查询的总记录

时间:2019-01-16 17:02:53

标签: spring spring-data-jpa jpa-2.0 criteria-api jpa-2.1

我正在对存储库层中的分页进行编程。函数将spring的可分页对象和一些值作为参数接收:

public Page<Foo> filterFoo(Pageable pageable, String value) {
   CriteriaBuilder cb = entityManager.getCriteriaBuilder();
   CriteriaQuery<Foo> fooQuery = cb.createQuery(Foo.class);
   Root<Foo> foo = fooQuery .from(Foo.class);
   fooQuery .where(adding predicate for match value);

   List<Foo> result = entityManager.createQuery(fooQuery )
      .setFirstResult((pageable.getPageNumber() - 1) * pageable.getPageSize())
      .setMaxResults(pageable.getPageSize())
      .getResultList();
   return new PageImpl<>(result, pageable, xxxx);
}

函数返回弹簧的PageImpl对象充满了我的结果。对于PageImpl,我还需要设置适合谓词的对象总数。当然,此计数必须没有maxResult和firstResult。是否可以使用fooQuery创建另一个数据库调用来获取该查询的数据库记录总数而没有限制?在JPA中使用可分页和标准api的最佳实践是什么?谢谢你的建议。

0 个答案:

没有答案