Spring 引导分页 - PagingAndSortingRepository 未返回任何结果

Spring Boot Pagination - PagingAndSortingRepository not returning any results

我在 Spring 引导中创建了一个 PagingAndSortingRepository,但它没有 return 任何结果(认为它应该)。

存储库:

@Repository
public interface DoctorPagingRepository extends PagingAndSortingRepository<Doctor, Integer> {

    Page<Doctor> findByName(String name, Pageable pageable);
    Page<Doctor> findAllByUsername(String username, Pageable pageable);
    Page<Doctor> findAllByName(String name, Pageable pageable);
    Page<Doctor> findAllByNameContaining(String name, Pageable pageable);
}

当不使用 Pageable 方法时,我还有其他可用的存储库,即

@Repository
public interface UserPagingRepository extends PagingAndSortingRepository<User, Integer> {
    User findByUsername(String username);
    User findByEmail(String email);
}

但每当我尝试使用可分页存储库方法时,它确实有效:

    @GetMapping("get-doctor/name/{name}/{pageNum}")
    public JsonResponse findDoctorByFirstname(@PathVariable String name, @PathVariable String pageNum) {
        //set page number and return up to 10 elements
        Pageable page = PageRequest.of(Integer.parseInt(pageNum), 10);

        //get list of users from that page
        Page<Doctor> doctorPage = userServices.getDoctorPaging().findAllByNameContaining(name, page);

        //set response object with users
        DoctorListResponse res = new DoctorListResponse();
        try {
            doctorPage.getContent().forEach( u -> {
                logger.trace(u.toString());
                res.getDoctorJsons().add(new DoctorJson(u));
                res.setSuccess(true);
            });
         } catch (Exception e) {
             res.setSuccess(false);
         }
         
         res.setTotalPages(doctorPage.getTotalPages());
         return res;
    }

谁能看出这哪里出了问题?

原来问题出在PageRequest.of()方法的第一个参数page是'zero based page index',我没有意识到。因此,当 pageNum 设置为 1 时,它返回结果的第二页。第二页是空的,因为数据库中只有 5 个结果可以匹配我的查询将在第一页上(因为每个页面都设置为保留十个结果)。

解决方案只是从 pageNum 到 -1:

Pageable page = PageRequest.of(Integer.parseInt(pageNum)-1, 10);