Version v1.7 of the documentation is no longer actively maintained. The site that you are currently viewing is an archived snapshot. For up-to-date documentation, see the latest version.

DELETEクエリ

削除のためのクエリ

概要

DELETEクエリはQueryDsldeleteとそれに続く関数を呼び出して構築します。

single

エンティティ1件を削除するにはsingleを呼び出します。

val address: Address = ..
val query: Query<Unit> = QueryDsl.delete(a).single(address)
/*
delete from ADDRESS as t0_ where t0_.ADDRESS_ID = ? and t0_.VERSION = ?
*/

下記のマッピング定義に応じて、発行されるSQLに適切な値が反映されます。

  • @KomapperId
  • @KomapperVersion

クエリ実行時に楽観的排他制御が失敗した場合、org.komapper.core.OptimisticLockExceptionがスローされます。

batch

バッチでエンティティ複数件を削除するにはbatchを呼び出します。

val address1: Address = ..
val address2: Address = ..
val address3: Address = ..
val query: Query<Unit> = QueryDsl.delete(a).batch(address1, address2, address3)
/*
delete from ADDRESS as t0_ where t0_.ADDRESS_ID = ? and t0_.VERSION = ?
delete from ADDRESS as t0_ where t0_.ADDRESS_ID = ? and t0_.VERSION = ?
delete from ADDRESS as t0_ where t0_.ADDRESS_ID = ? and t0_.VERSION = ?
*/

下記のマッピング定義に応じて、発行されるSQLに適切な値が反映されます。

  • @KomapperId
  • @KomapperVersion

クエリ実行時に楽観的排他制御が失敗した場合、org.komapper.core.OptimisticLockExceptionがスローされます。

all

全件を削除するにはallを呼び出します。

val query: Query<Long> = QueryDsl.delete(e).all().options { it.copy(allowMissingWhereClause = true) }
/*
delete from EMPLOYEE as t0_
*/

optionsを呼び出してallowMissingWhereClausetrueを設定する必要があります。

このクエリを実行した場合の戻り値は削除された件数です。

where

任意の条件にマッチする行を削除するにはwhereを呼び出します。

val query: Query<Long> = QueryDsl.delete(a).where { a.addressId eq 15 }
/*
delete from ADDRESS as t0_ where t0_.ADDRESS_ID = ?
*/

デフォルトではWHERE句の指定は必須です。もしwhereのブロック内で条件が指定されない場合は例外が発生します。 意図的に全件削除を認めたい場合はoptionsを呼び出してallowMissingWhereClausetrueを設定します。

val query: Query<Long> = QueryDsl.delete(e).where {}.options { it.copy(allowMissingWhereClause = true) }
/*
delete from EMPLOYEE as t0_
*/

このクエリを実行した場合の戻り値は削除された件数です。

options

クエリの挙動をカスタマイズするにはoptionsを呼び出します。 ラムダ式のパラメータはデフォルトのオプションを表します。 変更したいプロパティを指定してcopyメソッドを呼び出してください。

val address: Address = ..
val query: Query<Unit> = QueryDsl.delete(a).single(address).options {
    it.copy(
      queryTimeoutSeconds = 5
    )
}

指定可能なオプションには以下のものがあります。

allowMissingWhereClause
空のWHERE句を認めるかどうかです。デフォルトはfalseです。
escapeSequence
LIKE句に指定されるエスケープシーケンスです。デフォルトはnullDialectの値を使うことを示します。
batchSize
バッチサイズです。デフォルトはnullです。
disableOptimisticLock
楽観的ロックを無効化するかどうかです。デフォルトはfalseです。この値がtrueのときWHERE句にバージョン番号が含まれません。
queryTimeoutSeconds
クエリタイムアウトの秒数です。デフォルトはnullでドライバの値を使うことを示します。
suppressLogging
SQLのログ出力を抑制するかどうかです。デフォルトはfalseです。
suppressOptimisticLockException
楽観的ロックの取得に失敗した場合にOptimisticLockExceptionのスローを抑制するかどうかです。デフォルトはfalseです。

executionOptions の同名プロパティよりもこちらに明示的に設定した値が優先的に利用されます。

最終更新 May 24, 2022: Fix typos (27dead1)