@Entity public class Organization {
@OneToOne(fetch = FetchType.EAGER)
@OnDelete(action = OnDeleteAction.CASCADE)
@Cascade(value = DELETE_ORPHAN)
private Days days;
}
我有以下实体定义,当父对象被删除时,它会生成一个 SQL 以在 @OneToOne 条目上执行级联删除。但它并没有在删除组织时删除“天数”条目。
h2、mysql 数据库会出现这种情况,请问这是什么问题。
最佳答案
My query looks like this "delete from Organization where some_key_id = ?" (am not deleting this based on primary key id)
批量删除(您应该在问题中提及)不会级联到任何内容。引用 JPA 1.0 规范:
4.10 Bulk Update and Delete Operations
...
A delete operation only applies to entities of the specified class and its subclasses. It does not cascade to related entities.
这是一个非常烦人的限制,有许多 RFE 可以改进(HHH-695、HHH-1917、HHH-3337、HHH-5529 等)。
目前,可能的解决方案包括:
- 自己清理子表
- 在架构中使用级联外键。
现在奇怪的部分...我对 @OnDelete(action = OnDeleteAction.CASCADE)
的理解是这个注解应该用来确保外键是用适当的 ON DELETE CASCADE
子句(解决方案 #2)。换句话说,我希望事情能奏效。
Hibernate 是否生成了 Organization
表?你能检查DDL吗?您看到预期的 ON DELETE CASCADE
了吗?如果没有,请添加。
关于sql - 无法级联删除@OneToOne 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151316/