首页 > 解决方案 > 如何使用 Hibernate 继承模型使 OnDelete CASCADE 工作

问题描述

家长:

@Entity  
@Table(name = "Parent")  
@Inheritance(strategy=InheritanceType.JOINED)
public class Parent {
    @Id  
    @GeneratedValue(strategy=GenerationType.AUTO)  
    @Column(name = "id")  
    protected int id;  
    //some code here
}

孩子1:

@Entity  
@Table(name="Child1")   
@PrimaryKeyJoinColumn(name="id")
@OnDelete(action = OnDeleteAction.CASCADE)
public class Child1 extends Parent {
        //some code here
}

我正在使用 Hibernate Mapping 在 MySQL 中制作表格。我对休眠完全陌生。正在创建表,并且子表还有一个引用父表 id 的外键,正如我提到的 @PrimaryKeyJoinColumn 注释。在子表中添加字段也会将其添加到父表中,因为它已被扩展。但是删除父表中的一行并不会删除子表行。也许我在这里某处采取了错误的方法。我的最终目标是扩展父级,并使用子表向其中添加记录。我需要一些指示。也许其他注释,实现目标的其他方式。

标签: javamysqlhibernatehibernate-mapping

解决方案


我通过添加ON DELETE CASCADE到子表的外键来解决这个问题。

参考:https ://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html

例子:

CREATE TABLE parent (
    id INT NOT NULL,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (
    id INT,
    parent_id INT,
    INDEX par_ind (parent_id),
    FOREIGN KEY (parent_id)
        REFERENCES parent(id)
        ON DELETE CASCADE
) ENGINE=INNODB;

推荐阅读