@OneToOne删除一个孩子

时间:2014-07-24 23:03:15

标签: java jpa eclipselink

我有一个指向Child类的Parent类:

public class Parent {

    @OneToOne
    private Child child;

}

public class Child {

}

有没有办法删除子而没有获得约束异常?

Caused by: com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails
P.S:我不完全确定我是否正确地建模了这个。 Parent可以指向一个Child,但可以通过多个Parent指向Child的实例。我想要做的是删除一个孩子并在所有被删除的父母中引用它。希望你明白。

1 个答案:

答案 0 :(得分:2)

来自this我认为你需要做两件事:

修复关系

public class Parent {

    @ManyToOne(optional=true)
    private Child child;

}

public class Child {

    @OneToMany
    private Set<Parent> parents;
}

实现删除方法:

void removeChild(Child toRemove) {
    for (Parent p : toRemove.getParents())  {
        p.setChild(null);
        em.merge(p);
    }
    em.delete(toRemove);
}