【问题标题】:@OneToOne removing a child@OneToOne 删除一个孩子
【发布时间】:2014-07-24 23:03:15
【问题描述】:

我有一个父类指向一个子类:

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,但 Child 的实例可以由多个 Parent 指向。我想做的是删除一个孩子并删除所有父母之间的引用。希望你能理解。

【问题讨论】:

  • 如果一个Child可以有多个Parent,那么@OneToOne是错误的,你需要在Parent中使用@OneToMany。并在Child@ManyToOne List<Parent> parents 中使用类似的东西

标签: java jpa eclipselink


【解决方案1】:

来自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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多