我想在拖动一个过滤器时对在Spring端点中分配给终端的过滤器列表进行排序,并且如果再次计算,则所有过滤器的顺序。我尝试过:
DTO:
public class FilterNewDTO {
private Integer id;
private Integer terminal_id;
private Integer position;
private Integer parent_id;
}
端点:
@PostMapping("filter/updated_position/{id}")
public ResponseEntity<?> saveFilterPosition(@PathVariable Integer id, @RequestBody FilterNewDTO dto) {
List<Filters> list = filterService.findFiltersByTerminalId(dto.getTerminal_id());
for (int i=0; i<list.size(); i++) {
Filters filter = list.get(i);
int current_position = 0;
current_position = filter.getPosition();
filter.setPosition(current_position + 1);
filter.update(risk_mapper.toFilter(dto));
filterService.save(filter);
}
return ok().build();
}
但是您可以看到,我只是通过终端ID遍历了过滤器列表。如果将滤镜位置从3更改为5,会发生什么?我认为第1-3部分不应增加。您能给我一些实施方法的指导吗?
答案 0 :(得分:2)
与其将过滤器视为单个过滤器,不如将它们视为一个整体。您将获得过滤器列表,然后将其重新排列在新列表中。您对订单感到满意,然后更新所有这些,而不是一一更新。您不必担心此操作的性能,因为休眠将设法区分已更改的过滤器和未更改的过滤器。
类似:
List<Filter> originalList;
List<Filter> newlyOrderedList;
//do your ordering here
filterRepository.saveAll(newlyOrderedList);
答案 1 :(得分:0)
假设您希望每个终端的过滤器的编号都从1 ... n开始,setPosition()
部分应该是
filter.setPosition(i+1);