sql - 无法级联删除@OneToOne 成员

标签 sql mysql hibernate jpa h2

@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-695HHH-1917HHH-3337HHH-5529 等)。

目前,可能的解决方案包括:

  1. 自己清理子表
  2. 在架构中使用级联外键。

现在奇怪的部分...我对 @OnDelete(action = OnDeleteAction.CASCADE) 的理解是这个注解应该用来确保外键是用适当的 ON DELETE CASCADE 子句(解决方案 #2)。换句话说,我希望事情能奏效。

Hibernate 是否生成了 Organization 表?你能检查DDL吗?您看到预期的 ON DELETE CASCADE 了吗?如果没有,请添加。

关于sql - 无法级联删除@OneToOne 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151316/

相关文章:

mysql - SQL 查询连接 4 个表并从 2 个不同的表中获取 2 列的总和

mysql - 使用 Node+MySql Docker 容器登录注册表单

php - 用于在一张表中显示和排序消息及其回复的 SQL

hibernate - (moxy) jaxb 编码(marshal)处理和 hibernate 代理对象

java - hibernate 的替代品

java - Hibernate 集合中的并发修改

mysql - 创建表错误 MySQL Varchar 外键

php - 根据搜索条件在 PHP 中嵌入 SQL 搜索 $var

mysql - 加载数据 INFILE - 绝望地卡住了

MYSQL数据库查询返回最高分