Version v3.0 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クエリはQueryDsl
のdelete
とそれに続く関数を呼び出して構築します。
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() }
/*
delete from EMPLOYEE as t0_
*/
このクエリを実行した場合の戻り値は削除された件数です。
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
を呼び出してallowMissingWhereClause
にtrue
を設定します。
val query: Query<Long> = QueryDsl.delete(e).where {}.options { it.copy(allowMissingWhereClause = true) }
/*
delete from EMPLOYEE as t0_
*/
このクエリを実行した場合の戻り値は削除された件数です。
returning
以下の関数の後続でreturning
関数を呼び出すことで、削除された値を取得できます。
- single
- where
single
関数の後続でreturning
関数を呼び出す例です。
val address: Address = ..
val query: Query<Address?> = QueryDsl.delete(a).single(address).returning()
/*
delete from ADDRESS where ADDRESS_ID = ? and VERSION = ? returning ADDRESS_ID, STREET, VERSION
*/
returning
関数にプロパティを指定することで取得対象のカラムを限定できます。
val query: Query<Int?> = QueryDsl.delete(a).single(address).returning(a.addressId)
/*
delete from ADDRESS where ADDRESS_ID = ? and VERSION = ? returning ADDRESS_ID
*/
val query: Query<Pair<Int?, String?>?> = QueryDsl.delete(a).single(address).returning(a.addressId, a.street)
/*
delete from ADDRESS where ADDRESS_ID = ? and VERSION = ? returning ADDRESS_ID, STREET
*/
val query: Query<Triple<Int?, String?, Int?>?> = QueryDsl.delete(a).single(address).returning(a.addressId, a.street, a.version)
/*
delete from ADDRESS where ADDRESS_ID = ? and VERSION = ? returning ADDRESS_ID, STREET, VERSION
*/
Warning
returning
関数は次のDialectでのみサポートされています。
- H2 Database
- MariaDB
- Oracle Database
- PostgreSQL
- SQL Server
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句に指定されるエスケープシーケンスです。デフォルトは
null
でDialect
の値を使うことを示します。 - batchSize
- バッチサイズです。デフォルトは
null
です。 - disableOptimisticLock
- 楽観的ロックを無効化するかどうかです。デフォルトは
false
です。この値がtrue
のときWHERE句にバージョン番号が含まれません。 - queryTimeoutSeconds
- クエリタイムアウトの秒数です。デフォルトは
null
でドライバの値を使うことを示します。 - suppressLogging
- SQLのログ出力を抑制するかどうかです。デフォルトは
false
です。 - suppressOptimisticLockException
- 楽観的ロックの取得に失敗した場合に
OptimisticLockException
のスローを抑制するかどうかです。デフォルトはfalse
です。
executionOptions の同名プロパティよりもこちらに明示的に設定した値が優先的に利用されます。