我有一个名为 getAllEmployees() 的方法,它返回一个可分页的。
假设页面大小为 1 并从第 0 页开始
可分页可分页 = PageRequest.of(0, 1);
Page<String> allEmployees = service.getAllEmployeeNames(pageable)
while(true) {
for(String name: allEmployees.getContent()) {
// check whether the employee needs to be deleted or not based on certain conditions
boolean isDelete = service.checkEmployeeToBeDeleted()
if (isDelete)
EmployeeEntity entity = service.findByName(name);
service.delete(entity);
}
if (!page.hasNext()) {
break;
}
pageable = page.nextPageable();
}
- 在这种情况下,所有员工都不会被删除,只有符合条件的员工才会被删除
因为页面大小为 1
假设共有 6 名员工
emp pageable(pageNumber, pageSize)
1 (0 ,1)
2 (1 ,1)
3 (2 ,1)
4 (3 ,1)
5 (4 ,1)
6 (5 ,1)
当 1 被删除时,分页将像
2 (0 ,1)
3 (1 ,1)
4 (2 ,1)
5 (3 ,1)
6 (4 ,1)
但是当我们使用 page.nextPageable() 时,下一个将像 (1,1)
所以在下一次 fetch 时,它将选择 emp 3,而 emp 2 将被错过