Hibernate级联设置为many2many关系

时间:2015-03-25 08:01:50

标签: hibernate

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在查询运算符时避免级联查询。

1 个答案:

答案 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);
}