I'm trying to see whether a Cab
is assigned to any Employee
so I can fetch that Employee
Id and simply to set cab as null
, but @OneToMany
mapping, simply returning a list of Employees & by this I'm not getting any method like a cab.getEmp()
to fetch employee details
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);
}
}
}
CodePudding user response:
In your code, Cab
is perent class and Employee
is child class and your goal is to remove the child class dependency with parent class. For that, You have to extract the Employee
from Cab
and remove the relationship with Cab
using 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;
}