我试图查看是否将cab分配给任何员工,这样我就可以获取该员工Id,并简单地将cab设置为null,但映射为@OneToMany,只需返回一个员工列表&通过这种方式,我不会得到任何像cab.getEmp()这样的获取员工详细信息的方法

Employee.java

@Data
@Entity
@Table(name = "employee")
public class Employee {

    @Id
    private Integer id;
    private String username;
    private String password;
    private String role;
    private String dropLocation;

    @ManyToOne(
        cascade = CascadeType.ALL,
        fetch = FetchType.EAGER
    )

    @JoinColumn(
        name = "empCab",
        referencedColumnName = "cabId"
    )
    public Cab cab;
}

Cab.java

@Data
@Entity
@Table(name = "cab")
public class Cab {

    @Id
    private Integer cabId;
    private Integer cabNumber;
    private String cabShift;
    
    @OneToMany(
        cascade = CascadeType.ALL,
        fetch = FetchType.EAGER,
        mappedBy= "cab"
    )
    private List<Employee> emp = new ArrayList<>();

Controller

    @GetMapping("deleteCab")
        public ModelAndView deleteCab(@RequestParam("id") Integer id, ModelAndView mvc){
            Cab cab = cabRepo.findById(id).orElse(null);
            if(cab!=null){
                List<Employee> emp =  cab.getEmp();
                if(!cab.getEmp().isEmpty()){
                    //e1.setCab(null);
                    //empRepo.save(e1);
                    mvc.addObject("msg", "Cab deleted & an employee cab detail also got changed");
                    mvc.setViewName(NOTHING_JSP);
                } else {
                    cabRepo.deleteById(id);
                    mvc.addObject("msg", "Cab removed from the database");
                    mvc.setViewName(NOTHING_JSP);
                }
}

推荐答案

在您的代码中,Cab是perent类,Employee是子类,您的目标是移除子类与父类的依赖关系.为此,必须从Cab中提取Employee,并使用employee.setCab(null)删除与Cab的关系.

@GetMapping("/deleteCab")
@ResponseBody
public ModelAndView deleteCab(@RequestParam("id") Integer id, ModelAndView mvc){
    Cab cab = cabRepo.findById(id).orElse(null);
    if(cab != null){
         // Extract employee from cab
         for(Employee emp: cab.getEmp())
         {
            // Remove the relationship with cab
            emp.setCab(null);
         }
         cabRepo.save(cab);
         mvc.addObject("msg", "Cab deleted & an employee cab detail also got changed");
         mvc.setViewName(NOTHING_JSP);
    } else {
         cabRepo.deleteById(id);
         mvc.addObject("msg", "Cab removed from the database");
         mvc.setViewName(NOTHING_JSP);
    }
    return mvc;
}

Java相关问答推荐

一般类型和kotlin阴影Java函数的问题

BiPredicate和如何使用它

为什么如果数组列表中有重复项,我的代码SOMETIMES不返回true?

最小拓Flutter 排序的时间复杂度是多少?

参数值[...]与预期类型java.util.Date不匹配

Java 21 struct 化连接货币,需要可预知的子任务异常排序

更新AWS凭据

Java中将文本拆分为数字或十进制数字和字符串

为什么Collectors.toList()不能保证易变性

Spring Boot中的应用程序.properties文件中未使用的属性

如何使用Criteria Builder处理一对多关系中的空值?

AbstractList保证溢出到其他方法

在JDK Flight Recorder中只记录单个线程

在Oracle db中,当我们提供字符串而不是数字时,比较是如何工作的?

为了安全起见,有必要复制一份 list 吗?

如何对存储为字符串的大数字数组进行排序?

Java List有一个在一个位置添加多个元素的方法,但我找不到一个在一个位置删除多个元素的方法

H2数据库仅支持%1个结果集?

如何设置默认序列生成器分配大小

错误:JOIN/ON的参数必须是boolean类型,而不是bigint类型.Java Spring启动应用程序