我正在尝试查看是否将
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);
}
}
}
在您的代码中,
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;
}