英文:
I don't get the specified page interval while running Spring Data Jpa Pagination
问题
- 实体
@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 查询的字段值
* @param numberPage 要获取请求列表的起始页数
* @param amountPage 每个请求接收的页数
* @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;
}
我使用以下参数进行分页:
-
Integer numberPage = 0;
-
Integer amountPage = 5;
我获得了结果。
我使用以下参数进行分页:
-
Integer numberPage = 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);
英文:
- entity
@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;
- repository
public interface EmployeeViewPaginationRepository extends PagingAndSortingRepository<EmployeeView, Long> {
List<EmployeeView> findAllBySalary(Double Salary, Pageable pageable);
}
- service
/**
*
* @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;
}
I pass these parameters for pagination:
-
Integer numberPage = 0;
-
Integer amountPage = 5;
I get the result.
I pass these parameters for pagination:
-
Integer numberPage = 1;
-
Integer amountPage = 5;
I get 0 entries.
I tried that.
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;
I have table with 10 entries.
Who has any idea why this is happening?
Solution.
I understood.
When we specify the total number of pages to navigate, we count the specified number from the initial value.
For example.
0, 4-we will get pages from 1st to 4th.
1, 4 - we will get pages from 5 to 9.
That is, if we have 10 pages, in this case we will see 3 pages.
So the first parametr is the page number...
Iterable<EmployeeViewDto> getAllBySalaryFromRefCursor(Integer numberPage, Integer amountPage);
专注分享java语言的经验与见解,让所有开发者获益!
评论