当前位置: 首页 > 知识库问答 >
问题:

如何使用Hibernate继承模型使OnDelete级联工作

巢德华
2023-03-14

起源:

@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映射在MySQL中创建表。我对冬眠是完全陌生的。正在创建表,并且子表有一个外键,它引用父表id,正如我提到的@PrimaryKeyJoinColumn注释。在子表中添加字段也会在扩展时将其添加到父表中。但删除父表中的行不会删除子表中的行。也许我在某个地方走错了路。我的最终目标是扩展父表,并使用子表向其添加记录。我需要一些指针。也许是其他注释,或者其他实现目标的方法。

共有1个答案

吕英才
2023-03-14

我通过将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;

 类似资料:
  • 我有单向相关实体: 以及以下测试: 如果不是从测试中调用此代码,则效果很好,但在测试中,我得到了一个例外,即建议没有被书籍删除。 此外,我尝试从为Hibernate查询记录的sql中获取任何信息,但我看不到此测试的任何语句。 我不想对实体使用双向链接,只想了解如何解决这个具体问题或以某种方式调试它。

  • 问题内容: 我在Django中有一些模型继承级别: 和继承了许多不同的模型。我想创建一个信号,当创建附件时,该信号将更新父工作的字段。认为为父发件人()发出的信号也会在所有继承的模型上运行,这是合乎逻辑的,但事实并非如此。这是我的代码: 有没有办法使此信号对所有继承自其的模型起作用? Python 2.7,Django 1.4 pre-alpha 附言:我已经尝试了在网上找到的一种解决方案,但是它

  • 问题内容: 考虑此问题中列出的情况: 在Hibernate中映射多级继承 如何使用注释而不是hbm文件完成此映射? 问题答案: 您具体遇到什么问题?通过联接的子类映射类层次结构非常简单: 更新 (基于Michal的评论)。 如果您确实要使用区分符(并且您应该有 充分的 理由这样做),则可以通过将基于类的表策略与辅助表进行混合来实现: 这种方法的缺点是,您必须为每个映射的属性显式指定表:

  • 我在Hibernate中有道传承,下面是代码: 用户DAO: 我有一个域类用户和两个子类用户:Customer和Sales。我有两个dao类,分别用于客户和销售。 用户DAO: 客户道: 销售DAO: 我的问题是,当我使用CusterDap调用方法getUserByUsername()(继承自BaseDaoImpl)与销售的用户名(拥有用户名的用户是SalesRep的实例,而不是客户)时,它会抛出

  • 问题内容: 如何在hibernate状态下使用层叠和注释? 但是我仍然怀疑: 我有这种情况: 当我尝试时,发生错误。我不想保存产品和包装。我只想初始化并将它们设置到我的包对象中。 那可能吗? 问题答案: 请参阅有关此问题的hibernate文档。例如,您可以使用例如 要么