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,即使正在执行删除命令,对象也不会被删除的主要内容,如果未能解决你的问题,请参考以下文章
mvn spring-boot:run 不会在资源中执行 schema.sql
REST API 在 Spring Boot 中删除 HTTP 请求
springboot stringredistemplate 能存对象吗