gpt4 book ai didi

spring - 在 spring boot 中使用 pageable 获取和删除对象

转载 作者:行者123 更新时间:2023-12-04 01:25:32 27 4
gpt4 key购买 nike

我有一个名为 getAllEmployees() 的方法,它返回一个可分页的。

假设页面大小为 1,从第 0 页开始

可分页 pageable = 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)

所以在下一次获取时,它将选择 emp 3,而 emp 2 将被遗漏

最佳答案

我遇到了类似的问题。问题是您在进行迭代时一步进行“搜索”和“删除”。因此删除将修改搜索,但您在初始搜索中更进了一步。 (我认为这是主要问题)。

我的解决方案是,首先搜索所有需要删除的对象并将它们放入列表中。并在搜索之后,删除那些对象。所以你的代码可能是这样的:

Page<String> allEmployees = service.getAllEmployeeNames(pageable)

List<EmployeeEntity> deleteList = new ArrayList<>();
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);
deleteList.add(entity);
}

if (!page.hasNext()) {
// here iterate over delete list and service.delete(entity);
break;
}

pageable = page.nextPageable();
}

关于spring - 在 spring boot 中使用 pageable 获取和删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62000866/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com