解决在oracle数据库环境下 小组权限更新 角色权限表因为in子句中表达式超过1000的报错的问题

This commit is contained in:
qinoy 2023-08-02 11:34:03 +08:00
parent 27d8c31f3f
commit 7437cffd98
2 changed files with 27 additions and 2 deletions

View File

@ -1149,8 +1149,33 @@ public class CoeCooperationAPIManager {
}
}
if (deleteIds.size() > 0){
// 删除不在小组权限范围内的数据
rolePermDao.removeDataByTeamAndPalVersionIds(teamId, roleModel.getId(), deleteIds);
if (deleteIds.size() <= 1000){ // 直接删除
// 删除不在小组权限范围内的数据
rolePermDao.removeDataByTeamAndPalVersionIds(teamId, roleModel.getId(), deleteIds);
}else { // 分批次删除
// 每个小集合的大小
int batchSize = 1000;
// 计算需要拆分的次数
int numBatches = (deleteIds.size() + batchSize - 1) / batchSize;
// 拆分成多个小集合
List<Set<String>> batches = new ArrayList<>();
Iterator<String> iterator = deleteIds.iterator();
for (int i = 0; i < numBatches; i++) {
Set<String> batch = new HashSet<>();
for (int j = 0; j < batchSize && iterator.hasNext(); j++) {
batch.add(iterator.next());
}
batches.add(batch);
}
// 遍历小集合进行相应的操作
for (Set<String> batch : batches) {
// 在这里执行你的操作例如删除操作
rolePermDao.removeDataByTeamAndPalVersionIds(teamId, roleModel.getId(), batch);
}
}
}
}
}