JPA中的外键约束错误

时间:2013-06-18 19:23:09

标签: 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类型的属性。删除instanceC的{​​{1}}个实例时,必须同时删除引用它的EntityC个实例instancesBEntityB包含该EntityA的实例instancesB

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

  

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

1 个答案:

答案 0 :(得分:2)

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