有没有办法返回JOOQ批量更新中所有更新的行

问题描述 投票:0回答:1

我正在尝试执行批量更新查询并返回所有受影响的行。也许有人可以帮忙

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 等集合,但无论如何它都不起作用

java kotlin jooq
1个回答
0
投票

从 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):

  • 蟑螂数据库
  • Db2
  • 火鸟
  • H2
  • 玛丽亚数据库
  • 甲骨文
  • PostgreSQL
  • SQL 服务器
  • YugabyteDB
© www.soinside.com 2019 - 2024. All rights reserved.