java - 实现订单排序

标签 java spring spring-boot spring-data

我想在拖动一个过滤器时对分配给 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/

相关文章:

java - 他们是如何在 Android 上制作 imo/ebuddy 应用程序的?

java - 从现有 Java 对象或 xsd 生成 .proto 文件

java - 如何在 Controller 方法之前获取 HttpServletRequest

java - 为什么使用 Spring Mail 会丢失附件? ( Kotlin )

java - 在 WebSphere 9 上运行 Spring Boot 应用程序

java - VSCode无法导入外部库

没有 E 的 Java BigDecimal

java - 打印入站和出站负载日志 jersey REST API 和 Spring

Java设计问题

java - HttpClient 超时