我有三个看起来像这样的实体:

@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的属性。删除instanceC的实例EntityC时,也必须从包含instancesBEntityB实例中删除所有引用它的EntityA实例instancesB

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


  com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败

最佳答案

您的B表具有同时保留A和C的外键以及当前映射。因为到A的fk由A的OneToMany到B的控制,所以只要删除B时删除A对B的引用,这就不会有太大的问题,只是保持缓存的实体与更改同步。另一方面,与C的关系要求您先从B解引用C,然后再将其删除,否则也删除B,否则B表中的fk将保留,从而违反了约束。注释说明,删除实体时需要某种级别的关系管理。

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

10-13 22:32