我有三个实体,如下所示:
@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
个实例instancesB
。EntityB
包含该EntityA
的实例instancesB
。
我可以通过注释实现这种行为吗?在代码的当前状态下,当删除EntityC
对象时,我得到以下异常:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败
答案 0 :(得分:2)
您的B表具有A和C的外键,并且必须保留当前的映射。因为A的Ak由A的OneToMany控制到B,所以只要在删除B时删除A对B的引用,只要保持缓存的实体与更改同步,这个问题就不会太大。另一方面,与C的关系要求您在删除C之前取消引用C,或者删除B,否则B表中的fk将保留,违反约束。正如评论所述,在删除实体时,您将需要一定程度的关系管理。