子实体上的ON DELETE CASCADE是否正确?

时间:2016-04-22 15:25:02

标签: java hibernate

我有一个父子关系,我希望hibernate自动生成架构。特别是数据库触发器(\$.*?\]?)[,\]] 应设置属性。

意思是:当我删除父母时,当然应该删除孩子。但是当我移除一个孩子时,父母应该留下来。

ON DELETE CASCADE

这会创建以下架构:

@Entity
public class MyOffer {
    @OneToMany(mappedBy = "offer", cascade.CascadeType.ALL, orphanRemoval = true)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Set<MyCategory> categories;
}

@Entity
public class MyCategory {
        @ManyToOne
        private MyOffer offer;
}

问题:这是正确的,CREATE TABLE my_category( ... CONSTRAINT fk_offer FOREIGN KEY (fk_offer_id) REFERENCES offers (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE ) 在孩子身上是有效的,而不是在父母身上?

1 个答案:

答案 0 :(得分:1)

是的,它是外键约束的属性。

也就是说,如果您使用任何类型的卷进行此操作,您将要确保子表上的FK已编入索引。否则,从父表中删除任何内容都将导致子表的完整表扫描,无论是否有要删除的子行。