Я не получаю указанный интервал страницы при запуске Spring Data Jpa Pagination - PullRequest
0 голосов
/ 08 апреля 2020
  • сущность
@Table(name = "EMPLOYEES_VIEW")
@Entity
public class EmployeeView {

    @Id
    @Column(name = "EMPLOYEEID")
    private Long employeeId;

    @Column(name = "ADDRESS")
    private String address;

    @Column(name = "FIRST_NAME")
    private String firstName;

    @Column(name = "LAST_NAME")
    private String lastName;

    @Column(name = "SALARY")
    private Double salary;
  • хранилище
public interface EmployeeViewPaginationRepository extends PagingAndSortingRepository<EmployeeView, Long> {
    List<EmployeeView> findAllBySalary(Double Salary, Pageable pageable);

}
  • служба

    /**
     *
     * @param salary value of field that is done an query
     * @param numberPage start number of the page to get the requested list from
     * @param amountPage the number of pages received per request
     * @return
     */
    @Override
    public Iterable<EmployeeViewDto> getAllBySalary(Double salary, Integer numberPage, Integer amountPage) {

        PageRequest pageRequest = PageRequest.of(numberPage, amountPage);

        Iterable<EmployeeView> employeeViews = findEmployeesFromViewPagination(salary, pageRequest);

        Iterable<EmployeeViewDto> listDto = transformViewPagToListDto(employeeViews);

        return listDto;
    }


    private Iterable<EmployeeView> findEmployeesFromViewPagination(Double salary, Pageable pageable){

        Iterable<EmployeeView> allEmployees = this.paginationRepository.findAllBySalary(salary, pageable);

        return allEmployees;
    }

Я передаю эти параметры для нумерации страниц:

  • Целое числоPage = 0;

  • Целое числоPage = 5;

Я получаю результат.

Я передаю эти параметры для нумерации страниц:

  • Целое числоPage = 1;

  • Integer amountPage = 5;

Я получаю 0 записей.

Я пробовал это.

select
        *
    from
        ( select
            row_.*,
            rownum rownum_
        from
            ( select
                employeevi0_.employeeid as employeeid1_5_,
                employeevi0_.address as address2_5_,
                employeevi0_.first_name as first_name3_5_,
                employeevi0_.last_name as last_name4_5_,
                employeevi0_.salary as salary5_5_
            from
                employees_view employeevi0_
            where
                employeevi0_.salary=800.00 ) row_
        where
            rownum <= 10
        )
    where
        rownum_ > 2;

У меня есть таблица с 10 записями.

Кто знает, почему это происходит?

Решение.

Я понял.

Когда мы указываем общее количество страниц для навигации мы считаем указанное число от начального значения.

Например.

0, 4 - мы получим страницы с 1-го по 4-й.

1, 4 - мы получим страницы с 5 по 9.

То есть, если у нас будет 10 страниц, в этом В этом случае мы увидим 3 страницы.

Итак, первым параметром является номер страницы ...

 Iterable<EmployeeViewDto> getAllBySalaryFromRefCursor(Integer numberPage, Integer amountPage);
...