在我的springboot 2.7.14项目中,我需要执行一个带有投影、规范和分页的查询。
我已经尝试过库“带投影的规范”,但它似乎不适合我的情况,因为查询仍在检索所有列,并且只有在检索完之后才映射我的投影。
所以我最终使用了CriteriaQuery。
前端将查询参数、pageNumber(以1为基数)、pageSize和偏移量传递给后端。
如何将所有这些信息放在一起以执行查询和返回Page对象?
这是我执行查询的说明:
List<MyDto> myDtoList= entityManager.createQuery(criteriaQuery)
.setFirstResult(((pageNumber - 1) * pageSize) + offset)
.setMaxResults(pageSize)
.getResultList();
之后,我进行“选择计数”以获得总数,并最终返回所有信息和此指令:
return new PageImpl<>(myDtoList, PageRequest.of(pageNumber - 1, pageSize), totalElements);
以这种方式返回的Page对象不包括正确的偏移量,而只包括操作pageNumber*pageSize中的偏移量。
我很确定问题出在PageRequest.of的实现中,所以我在这个答案中找到了这个类OffsetBasedPageRequest:
Pagination in Spring Data JPA (limit and offset)
不幸的是,这个特定的解决方案似乎不适用于最新版本的Springboot。
最近有人尝试过这样做吗?请帮助我正确实现OffsetBasedPageRequest?