我有一个父子关系,我希望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
)
在孩子身上是有效的,而不是在父母身上?
答案 0 :(得分:1)
是的,它是外键约束的属性。
也就是说,如果您使用任何类型的卷进行此操作,您将要确保子表上的FK已编入索引。否则,从父表中删除任何内容都将导致子表的完整表扫描,无论是否有要删除的子行。