Spring Boot,即使正在执行删除命令,对象也不会被删除

Posted

技术标签:

【中文标题】Spring Boot,即使正在执行删除命令,对象也不会被删除【英文标题】:Spring Boot, The object is not deleted eventhough delete command is being executed 【发布时间】:2022-01-19 13:05:17 【问题描述】:

我的桌子上有顾客和书籍。当客户被删除时,我还希望将图书的可用性设置为可用。当我只执行没有方法的前 3 行的代码时(将可用性设置为可用),它工作得非常好并删除了客户对象。但是当我将这些行添加到可用的设置书籍中时,什么也没有发生,客户对象保持不变。

@GetMapping("/customers/delete/id")
public String deleteCustomer(@PathVariable("id") int theId, Model model)
    Customer c1 = CustomerService.getSingleCustomer(theId).get();
    for(int i=0;i<c1.getRentedBooks().size();i++)
        c1.getRentedBooks().get(i).availability="Available";
    
   

    CustomerService.delete(theId);
    return "redirect:/customer/listofcustomers";

【问题讨论】:

对于初学者,此代码需要在服务中而不是在控制器中。其次,您在图书和客户之间是否存在双向关系?如果是这样,书上的更新将恢复客户。 我知道任何更新都会重新启用客户,但问题是我在删除客户之前会执行更新操作。所以在我看来,考虑到执行的顺序,什么都不应该改变。做我的目标的正确方法是什么。提前感谢您的评论 所有内容都立即刷新,而不是单个操作。您应该做的是在书籍中将客户设置为空,更改状态并删除用户。如前所述,此代码应在服务方法中而不是控制器方法中。你的控制器应该调用那个事务服务方法。 CustomerService 是一个类还是一个糟糕的变量标识符? ;(;(;( Hey Deinum,问题是我从未将 Book 的客户属性设置为 null。正如您告诉我的那样,我已将我的代码移至服务方法并将客户设置为空,同时删除。它就像一个魅力。感谢您抽出宝贵时间帮助我 【参考方案1】:

如果 Book 类中的字段可用性是私有的,请使用:

c1.getRentedBooks().get(i).setAvailability("Available");

【讨论】:

以上是关于Spring Boot,即使正在执行删除命令,对象也不会被删除的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 从命令行执行将文件添加到类路径

mvn spring-boot:run 不会在资源中执行 schema.sql

REST API 在 Spring Boot 中删除 HTTP 请求

springboot stringredistemplate 能存对象吗

即使在所有对象都已被删除和清除后,我如何才能让 R 释放并停止持有内存?

如何使用 Spring Boot 和 MongoDB 从 JSON 列表中删除对象