java - @OneToOne 删除一个 child

标签 java jpa eclipselink

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

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:我不完全确定我是否正确建模了。父级可以指向一个子级,但子级的实例可以由多个父级指向。我想做的是删除一个 child 并删除所有 parent 之间的引用。希望您能理解。

最佳答案

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

关于java - @OneToOne 删除一个 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945415/

相关文章:

java - Maven 错误 - java.lang.NoClassDefFoundError : org/slf4j/helpers/MarkerIgnoringBase

java - 从 Constructor 对象获取参数类型(Java 反射)

java - 获取 [SQLITE_BUSY] 数据库文件被选择语句锁定

jakarta-ee - TypedQuery 代替 JPA 中的普通查询

java - 如何使用 EclipseLink 更新 MySQL 表中的列?

jaxb - EclipseLink MOXy 不编码用 @XMLAttribute 注释的子图字段

java - 未找到依赖项

项目字段更改时 JavaFX 更新 FilteredList

java - 使用 Spring JPA/Hibernate 的条件插入

mysql - 使用乐观锁定检查 JPA 2 中提交时读取集的版本