无法从子级获取父级数据

问题描述 投票:0回答:1

我正在尝试查看是否将

Cab
分配给任何
Employee
,以便我可以获取该
Employee
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<>();
}

控制器

@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);
             }
         }
}
java spring-boot hibernate mapping
1个回答
0
投票

在您的代码中,

Cab
是父类,
Employee
是子类,您的目标是从父类中删除子类依赖项。

为此,您必须从

Employee
中提取
Cab
并使用
Cab
删除与
employee.setCab(null)
的关系。

@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;
}
© www.soinside.com 2019 - 2024. All rights reserved.