delete(entity)
概要
基本概念
Entityをもとに 排他制御あり一件削除 をします(但し、排他制御対象でないテーブルなら、排他制御なしの普通の一件削除)。主に、排他制御が必要なオンライン系の更新処理で利用されます。 アプリケーションでは、すれ違いが発生した場合に発生する例外を明示的にハンドリングし、業務的なアクションを取ることが想定されます。
会話上では、でりーと もしくは でりーとえんてぃてぃ と表現します。文脈上、曖昧で伝わりにくい場合は Behavior のでりーと(メソッド) や 排他制御ありのでりーと などと言うとわかりやすいでしょう。
実装方法
実装の流れ
Behaviorの delete() を呼び出し、Entityを指定します。
e.g. update()の実装手順 (Eclipseでコード補完) {MEMBER} @Java
memberBhv.del // .del と打って enter
--
memberBhv.delete(member);
排他制御処理を利用するために、事前に検索されたEntity、もしくは、事前に検索されたPKと排他制御カラムの値を設定して削除します。 (排他制御対象テーブルの場合)
e.g. 事前に検索されたEntityに対して削除 {MEMBER, memberId=3} @Java
Member member = memberBhv.selectByPKValue(3);
memberBhv.delete(member);
e.g. 事前に検索されたPKと排他制御カラムの値を設定して削除 {MEMBER} @Java
Member member = new Member();
member.setMemberId(memberId); // 事前に検索されたPK
member.setVersionNo(versionNo); // 事前に検索されたバージョン番号
memberBhv.delete(member);
ユニークキーで削除 @since 1.0.5g
主キーではなく、ユニーク制約のキーで削除することもできます。
プログラム上でPKは持ってなくて代わりにユニークキーだけを持っているような場合に、PK取得のためだけの無駄な事前検索を省くことができます。 (こういったケースはわりと多いと想定されます)
e.g. ユニークキーである会員アカウントで削除 {MEMBER} @Java
// PK取得のためだけの無駄な事前検索は不要
//Member member = memberBhv.selectEntityWithDeletedCheck(cb);
Member member = new Member();
member.uniqueBy(memberAccount); // ユニークキー (複合キーなら引数が増える)
memberBhv.delete(member);
細かい仕様は、update()と同じです。
メソッド仕様
引数
該当のBehaviorに対応するテーブルのEntityとなります。
nullを指定した場合は例外発生します。 また、PKカラムの値と(排他制御が有効の場合に)排他制御カラムの値の指定が必須です(指定なしは例外)。
戻り値
void です。
例外
- 削除対象が存在しなかった場合
- org.seasar.dbflute.exception.EntityAlreadyDeletedException
- この例外は、排他制御対象でない場合のみ発生します。排他制御対象の場合は、"削除対象が存在しないという状況" は、"すれ違いがあったのと同じ状況" として扱われます(仕組み上区別が付かないため)。
- 削除結果が複数件の場合
- org.seasar.dbflute.exception.EntityDuplicatedException
- 予期せぬレコードを削除してしまっている可能性があるため、ロールバックが求められます。
- すれ違いがあった場合
- org.seasar.dbflute.exception.EntityAlreadyUpdatedException
- この例外は、排他制御対象の場合のみ発生します。
排他制御の自動化
update(entity) と同じ仕組みです。
カスケードはしません
update(entity) と同じ仕様です。