java - JPA中的外键约束错误

标签 java jpa orm one-to-many many-to-one

我有三个实体,如下所示:

@Entity
class EntityA{       
    @OneToMany(cascade = javax.persistence.CascadeType.ALL, orphanRemoval = true)
    private List<EntityB> _candidates = null;
}

@Entity
class EntityB{       
   @OneToOne
   private EntityC _comp;
}

@Entity
class EntityC{
...
}

EntityB 具有 EntityC 类型的属性。当删除 EntityC 的实例 instanceC 时,引用它的 EntityB 的所有实例 instancesB 也必须被删除,来自包含 instancesBEntityA 实例。

我可以通过注释实现这种行为吗?在代码的当前状态下,删除 EntityC 对象时出现以下异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails

最佳答案

您的 B 表具有 A 和 C 的外键以及必须维护的当前映射。因为 A 的 fk 是由 A 到 B 的 OneToMany 控制的,所以只要在删除 B 时删除 A 对 B 的引用,就不会出现太大问题,只是为了保持缓存实体与更改同步。另一方面,与 C 的关系要求您在删除 C 之前从 B 取消引用 C,或者也删除 B,否则 B 表中的 fk 将保留,从而违反约束。正如评论所述,删除实体时您将需要某种程度的关系管理。

关于java - JPA中的外键约束错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17177165/

相关文章:

java - Spring Java Based Configuration中如何正确配置list、map、set

maven - 如何在构建时使用 openJPA 增强来自单独 jar 的类?

django - Django base.html 中的动态变量

php - 如何让 Doctrine 从类名中删除表前缀?

java - SLF4J logger.debug() 未登录 JBoss 6

java - 为什么向数组列表中添加一个新元素会用新元素替换所有以前的元素?

java - 在处理中使用 PGraphics 将页面添加到 PDF

Hibernate/JPA @AttributeOverrides 与 Groovy 不能很好地配合

java - 域类中的属性未映射到表

php - 如何根据 Laravel 中的模型制作迁移文件