我正在尝试执行批量更新查询并返回所有受影响的行。也许有人可以帮忙
fun updateStatuses(writeOffRequestsIds: Collection<UUID>, status: WriteOffRequestStatus): List<WriteOffRequest> {
val records = writeOffRequestsIds.map { id ->
db.update(WRITE_OFF_REQUEST)
.set(WRITE_OFF_REQUEST.STATUS, status)
.set(WRITE_OFF_REQUEST.UPDATED_AT, LocalDateTime.now())
.where(WRITE_OFF_REQUEST.ID.eq(id))
.returning()
}
//doesnt compile here
*return db.batchUpdate(*records.toTypedArray()).fetchInto(WriteOffRequest::class.java)
*}
我尝试了几种不同的方法。创建了 UpdateableRecord 等集合,但无论如何它都不起作用
从 jOOQ 3.18 开始,有一个待处理的功能请求,用于从批处理
INSERT
语句返回生成的 ID,一些 JDBC 驱动程序(但只有少数)本身支持:
我对
UPDATE
陈述的可能性不抱太大希望。但为什么不批量更新整个数据集呢?例如:
Table<?> s = sourceData.as("s");
例如,您可以使用
sourceData
构造
DSL.values()
然后:
ctx.update(WRITE_OFF_REQUEST)
.set(WRITE_OFF_REQUEST.STATUS, s.field(WRITE_OFF_REQUEST.STATUS)))
.set(WRITE_OFF_REQUEST.UPDATED_AT, LocalDateTime.now())
.from(s)
.where(WRITE_OFF_REQUEST.ID.eq(s.field(WRITE_OFF_REQUEST.ID)))
.returning()
.fetch();
这仅适用于某些可以本地支持此功能或以某种方式模拟它的方言,例如(截至 jOOQ 3.18):