1

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

@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。当一个 的实例instanceCEntityC删除时,所有引用它的实例也必须instancesB从包含.EntityBEntityAinstancesB

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

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

4

1 回答 1

2

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

于 2013-06-19T12:10:10.290 回答