Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス 12c (12.1.2) E48005-01 |
|
前 |
次 |
@CascadeOnDelete
注釈を使用して、データベース・オブジェクトで実行される削除操作をセカンダリ表または関連表にカスケードするように指定します。
ON DELETE CASCADE
は、データベースの外部キーの制約オプションで、依存行を自動的に削除します。
注釈要素
この注釈の要素はありません。
使用方法
ターゲットがソース・エンティティに対する外部キーとして定義されているすべてのリレーションシップに@CascadeOnDelete
を置くことができます。
次のソース・リレーションシップに注釈を追加します。@OneToOne
、@OneToMany
、@ManyToMany
および@ElementCollection
。また、@SecondaryTable
またはJOINED
継承のあるエンティティに@CascadeOnDelete
を追加することもできます。表2-8では、次の異なる要素に@CascadeDelete
を置くことによって、どのような影響があるかについて説明します。
表2-8 異なる要素での@Cascadeの使用
要素 | @CascadeOnDeleteの影響 |
---|---|
エンティティ |
セカンダリ表または結合された継承表がデータベースに削除をカスケードすることを定義します。 |
OneToOneマッピング |
関連オブジェクトの削除は、データベースにカスケードされます。 このことは、mappedBy/ターゲット外部キーのOneToOneマッピングにのみ許可されます(制約方向のため)。 |
OneToManyマッピング |
|
ManyToManyマッピング |
結合表の削除がデータベースにカスケードされます(制約方向により、プライベートでもターゲット・オブジェクトはカスケードできません)。 |
ElementCollectionマッピング |
コレクション表の削除が、データベースにカスケードされます。 |
@CascadeOnDelete
には、次の動作があります。
DDL生成: DDL生成を使用して生成された制約には、カスケード削除オプションが含められます。
エンティティ: セカンダリ表または結合された継承表からの削除では、SQLは実行されません(制約によって削除が処理されるため)。
OneToOne: マッピングでカスケードまたはorphanRemovalが使用される場合、ターゲット・オブジェクトを削除するためのSQLは実行されません。
OneToMany: マッピングでカスケードまたはorphanRemovalが使用される場合、ターゲット・オブジェクトを削除するためのSQLは実行されません。
ManyToMany: 結合表から削除するためのSQLは実行されません。
ElementCollection: コレクション表から削除するためのSQLは実行されません。
キャッシュ: カスケードされたオブジェクトが、キャッシュまたは永続性コンテキストから削除されます。
バージョン・ロック: カスケードされたオブジェクトの削除時に、バージョンは確認されません。
イベント: オブジェクトがロードされていない場合、カスケードされたオブジェクトで削除イベントが実行されないことがあります。
カスケード: 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に示すとおり削除時のカスケードを指定します。
関連項目
詳細は、次を参照してください。
『Oracle TopLinkソリューション・ガイド』のパフォーマンスの拡張に関する項