ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス
12c (12.1.2)
E48005-01
  目次へ移動
目次

前
 
次
 

@CascadeOnDelete

@CascadeOnDelete注釈を使用して、データベース・オブジェクトで実行される削除操作をセカンダリ表または関連表にカスケードするように指定します。

ON DELETE CASCADEは、データベースの外部キーの制約オプションで、依存行を自動的に削除します。

注釈要素

この注釈の要素はありません。

使用方法

ターゲットがソース・エンティティに対する外部キーとして定義されているすべてのリレーションシップに@CascadeOnDeleteを置くことができます。

次のソース・リレーションシップに注釈を追加します。@OneToOne@OneToMany@ManyToManyおよび@ElementCollection。また、@SecondaryTableまたはJOINED継承のあるエンティティに@CascadeOnDeleteを追加することもできます。表2-8では、次の異なる要素に@CascadeDeleteを置くことによって、どのような影響があるかについて説明します。

表2-8 異なる要素での@Cascadeの使用

要素 @CascadeOnDeleteの影響

エンティティ

セカンダリ表または結合された継承表がデータベースに削除をカスケードすることを定義します。

OneToOneマッピング

関連オブジェクトの削除は、データベースにカスケードされます。

このことは、mappedBy/ターゲット外部キーのOneToOneマッピングにのみ許可されます(制約方向のため)。

OneToManyマッピング

mappedByまたはJoinColumnを使用するOneToManyでは、関連オブジェクトの削除がデータベースにカスケードされます。

JoinTableを使用するOneToManyでは、結合表の削除がデータベースにカスケードされます(制約方向により、プライベートでも、ターゲット・オブジェクトはカスケードできません)。

ManyToManyマッピング

結合表の削除がデータベースにカスケードされます(制約方向により、プライベートでもターゲット・オブジェクトはカスケードできません)。

ElementCollectionマッピング

コレクション表の削除が、データベースにカスケードされます。


@CascadeOnDeleteには、次の動作があります。

例2-18に、従業員のセカンダリ表およびすべての所有されたリレーションシップのカスケード削除を示します。

例2-18 @CascadeOnDelete注釈の使用

@Entity
@SecondaryTable(name="EMP_SALARY")
@CascadeOnDelete
public class Employee{
    @Id
    private long id;
    private String firstName;
    private String lastName;
    @Column(table="EMP_SALARY")
    private String salary;
    @OneToOne(mappedBy="owner", orphanRemoval=true, cascade={CascadeType.ALL})
    @CascadeOnDelete
    private Address address;
    @OneToMany(mappedBy="owner", orphanRemoval=true, cascade={CascadeType.ALL})
    @CascadeOnDelete
    private List<Phone> phones;
    @ManyToMany
    @JoinTable(name="EMP_PROJ")
    @CascadeOnDelete
    private List<Project> projects;
    ...
}

eclipselink-orm.xmlディスクリプタ・ファイルで、例2-19に示すとおり削除時のカスケードを指定します。

例2-19 <cascade-on-delete> XMLの使用

...
<cascade-on-delete>true</cascade-on-delete>
...

関連項目

詳細は、次を参照してください。