deleteNonstrict(entity)

概要

基本概念

Entityをもとに 排他制御なし一件削除 をします。Nonstrict の strict は、排他制御のことです。主に、排他制御の不要なバッチ処理などで利用されます。

会話上では、でりーとのんすとりくと と表現します。文脈上、排他制御の有無を強調したい場合は 排他制御なしのでりーと などと言うとわかりやすいでしょう。

実装方法

実装の流れ

Behaviorの deleteNonstrict() を呼び出し、Entityを指定します。

e.g. deleteNonstrict()の実装手順 (Eclipseでコード補完) {MEMBER} @Java
memberBhv.delN // .delN と打って enter
--
memberBhv.deleteNonstrict(member);

排他制御が不要なため、PKの値が設定されていれば削除ができます。

e.g. Entityに対して主キーを設定して削除 {MEMBER, memberId=3} @Java
Member member = new Member();
member.setMemberId(3);
memberBhv.deleteNonstrict(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.deleteNonstrict(member);

細かい仕様は、update()と同じです。

排他制御をしないのであれば、queryDelete() で更新するのとやってることはほぼ同じです。 (実行して対象のレコードが存在しなかったときに例外になるか素通りするかの違いはあります)

メソッド仕様

引数

該当のBehaviorに対応するテーブルのEntityとなります。

nullを指定した場合は例外発生します。また、PKカラムの値の指定は必須です(指定なしは例外)。

戻り値

void です。

例外

削除対象が存在しなかった場合
org.seasar.dbflute.exception.EntityAlreadyDeletedException
この例外は、指定された主キーに対応するレコードが存在しなかった場合に発生します。 業務的に存在することが前提の更新であれば、開発時はバグ・データ不備、結合テスト・運用時はすれ違いと捉えることができます。
削除結果が複数件の場合
org.seasar.dbflute.exception.EntityDuplicatedException
予期せぬレコードを削除してしまっている可能性があるため、ロールバックが求められます。

排他制御の自動化

update(entity) と同じ仕組みです。

カスケードはしません

update(entity) と同じ仕様です。