我想在拖动一个过滤器时对分配给 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 部分不应增加。您能给我一些如何实现的指导吗?
最佳答案
不要将过滤器视为单独的过滤器,而是将它们视为一个整体。您将获得过滤器列表,并将它们重新排列在新列表中。您对订单感到满意,然后更新所有订单,而不是逐一更新。您不必担心此操作的性能,因为 hibernate 将设法区分已更改的过滤器和未更改的过滤器。
类似于:
List<Filter> originalList;
List<Filter> newlyOrderedList;
//do your ordering here
filterRepository.saveAll(newlyOrderedList);
关于java - 实现订单排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56575968/