2016-04-22 55 views
0

我有一个父子关系,我想让hibernate自动生成模式。尤其是数据库触发器ON DELETE CASCADE应该设置属性。在子实体上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 
) 

问题:是正确的,该cascade创建一个活跃的孩子,而不是在父?

回答

1

是的,它是外键约束的属性。这就是说,如果你曾经用过任何一种音量来做这件事,你会想确保子表上的FK被编入索引。否则,无论是否存在要删除的子行,从父表中删除都将导致对子表进行全表扫描。