@Entity public class Organization {
@OneToOne(fetch = FetchType.EAGER)
@OnDelete(action = OnDeleteAction.CASCADE)
@Cascade(value = DELETE_ORPHAN)
private Days days;
}
我有以下实体定义,当父对象被删除时,它生成一个SQL以对@OneToOne条目进行级联删除。但是在删除组织时并没有删除“天”条目。
这发生在h2,mysql数据库中,这可能是什么问题。
答案 0 :(得分:6)
好吧,我想你应该加一个
@Cascade(value = {DELETE, DELETE_ORPHAN})
请注意,在JPA 2.0中,您不必使用hibernate-sepcific @Cascade
注释 - @*ToMany
可以选择删除孤儿。
更新 未处理。你必须手动处理它们。这是预期和记录的行为。
答案 1 :(得分:5)
我的查询看起来像是“从组织中删除some_key_id =?” (我没有基于主键ID删除它)
批量删除(你应该在你的问题中提到)不会级联到任何东西。引用JPA 1.0规范:
4.10批量更新和删除操作
...
删除操作仅适用于 指定类的实体和 它的子类。 它没有级联到 相关实体。
这是一个非常恼人的限制,有许多RFE可以改善事物(HHH-695,HHH-1917,HHH-3337,HHH-5529等。
目前,可能的解决方案包括:
现在奇怪的部分......我对@OnDelete(action = OnDeleteAction.CASCADE)
的理解是,这个注释应该用于确保使用适当的ON DELETE CASCADE
子句创建外键(解决方案#2)。换句话说,我希望事情能发挥作用。
Hibernate是否生成了Organization
表?你能看看DDL吗?你看到了预期的ON DELETE CASCADE
吗?如果没有,请添加它。