2016-04-22 5 views
0

私は親子関係を持っており、スキーマを自動的に生成するために休止状態にします。特に、データベーストリガー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が索引付けされていることを確認する必要があります。そうしないと、親表からの削除によって、削除する子行があるかどうかにかかわらず、子表の全表スキャンが実行されます。

関連する問題