deleteNonstrictIgnoreDeleted(entity)

概要

基本概念

削除対象が存在しなかった場合に無視する 排他制御なし一件削除です。 削除対象が存在しない場合の挙動以外は、deleteNonstrict(entity) と同じです。

すれ違いなどで別の人に削除されていても、どのみち削除しようとしていたのだからそれはそれで業務的に問題としない、 というような場合に有効です。

会話上では、でりーとのんすとりくといぐのあぁでりーてぃっど と表現します。言いづらいのであれば、なければ無視するでりーと などと言うとわかりやすいでしょう。

実装方法

実装の流れ

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

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

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

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

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

排他制御をしないのであれば、queryDelete() で更新するのとやってることは実質的に同じです。

メソッド仕様

引数

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

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

戻り値

void です。

例外

削除結果が複数件の場合
org.seasar.dbflute.exception.EntityDuplicatedException
予期せぬレコードを削除してしまっている可能性があるため、ロールバックが求められます。

排他制御の自動化

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

カスケードはしません

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