public class Job {
@LazyCollection(LazyCollectionOption.FALSE)
@ManyToMany
@JoinTable(
name = "t_job_t_user",
joinColumns = @JoinColumn(name = "job_id"),
inverseJoinColumns = @JoinColumn(name = "user_id"))
private List<User> operator = new ArrayList<User>();
}
public class User {
@Id
@GeneratedValue
private int id;
//have no reference to Job
}
现在我无法删除User
对象,因为我将获得异常:
Cannot delete or update a parent row: a foreign key constraint fails ....
似乎这是由两个实体之间的关联引起的。
我想知道如何解决这个问题?
为什么我要避免在User
中添加引用:
1无需从用户逻辑角度了解作业。
2在查询运算符时避免级联查询。
答案 0 :(得分:0)
您应该在User类中添加引用:
@ManyToMany(mappedBy="operator")
private List<Job> job;
现在您可以将cascade=CascadeType.REMOVE
添加到@ManyToMany
注释中(如果其他用户正在引用作业,这可能会导致更多问题),或者您必须小心删除受影响的用户引用删除用户前的作业:
public void delete(User user) {
for (Job job : user.getJobs()) {
job.getOperator().remove(user);
}
user.getJobs().clear();
entityManager.remove(user);
}