我有一个JPAQuery,无法将其转换为spring [[1 1 0] [.05 1 2] [.05 .25 1] ]
查询。我设法使用findBy...
和offset
仅获得了少量请求的结果。问题在于,为了对结果进行实际的分页,我需要使用Spring存储库方法获得的数据(结果总数和页面总数)。我的代码现在看起来像这样:
limit
我曾考虑过自己构建页面,但我想我将不得不请求整个结果集,而不是获取少于50行,这样我就可以从该查询中获得数千个结果。
是否有一种从JPAQuery提取页面的干净方法?
答案 0 :(得分:0)
这就是JPA中的分页功能。首先需要有关行数的信息,以检查偏移量是否不超过数据,然后在可能的情况下针对数据运行实际查询,否则将引发异常。
答案 1 :(得分:0)
我可能可以借助规范来更轻松地实现,但不知道,因为我不确定您的实际需求。无论如何,请参见以下存储库,有关它的规范,尤其是其实现的接口
public interface SomeEntityRepository extends Repository<SomeEntity, Long>,
PagingAndSortingRepository<SomeEntity, Long>, JpaSpecificationExecutor<SomeEntity> {
@SuppressWarnings("serial")
public static Specification<SomeEntity> findByCountryIdSpecification(Long countryId) {
return new Specification<SomeEntity>() {
@Override
public Predicate toPredicate(Root<SomeEntity> root, CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
// implement query logic with "countryId" here
return null;
}
};
}
// there will be a method like below with JpaSpecificationExecutor
// Page<SomeEntity> findAll(Specification<SomeEntity> specification, Pageable pageable);
}
使用正确设计的规范,可轻松使用pageable:
repo.findAll(SomeEntityRepository.findByCountryIdSpecification(countryId), pageable);