【发布时间】:2013-06-18 19:23:09
【问题描述】:
我有三个如下所示的实体:
@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 的实例instanceC 被删除时,所有引用它的instancesB 的EntityB 实例也必须从包含instancesB 的EntityA 的实例中删除。
我可以通过注解实现这种行为吗?在代码的当前状态下,删除 EntityC 对象时出现以下异常:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:无法删除或更新父行:外键约束失败
【问题讨论】:
-
我认为你需要定义更多的关系。您应该在引用
EntityA的EntityB中添加@ManyToOne关系。您还应该将@OneToOne添加到引用EntityB的EntityC。然后您可以将CascadeType属性添加到您的所有关系中。 -
嗨@jahroy,感谢您的回复!这种方法似乎不起作用。我得到相同类型的错误。
EntityA和EntityC引用EntityB不是有问题吗?如果外键约束失败,我无法删除A或C。 -
如果
B包含C,则在删除B之前,您无法删除C。这就是外键的工作方式......我不确定你可以通过使用注释来改变它。另外,我不知道你是否愿意。我认为您需要编写一些业务逻辑来管理您的关系。说了这么多,我觉得我还不够专家在这里给你权威的建议。
标签: java jpa orm one-to-many many-to-one