当使用带有onduplicatekeyupdate的jooq批处理加载器时,如何只更新一些字段?

n3schb8v  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(384)

是否可以只在发现重复项时使用jooq的更新某些字段 batchAll() 装载机?类似于 onDublicateKeyUpdate() 可用于单个记录:https://www.jooq.org/doc/latest/manual/sql-building/sql-statements/insert-statement/insert-on-duplicate-key/.
我要更改的代码,在有重复项时只更新一个字段:

dsl.loadInto(TABLE)
        .batchAll()
        .onDuplicateKeyUpdate()
        .loadRecords(records)
        .fields(TABLE.fields())
        .execute();
eiee3dmh

eiee3dmh1#

不,这是不可能的 Loader api,但您可以使用单个语句的普通批处理,可以通过编程方式使用批处理api,也可以使用批处理连接,该连接收集所有jdbc语句并延迟执行,直到可以执行批处理:

dsl.batched(c -> {
    for (Record record : records) {
        c.dsl().insertInto(TABLE)
               .set(record)
               .onDuplicateKeyUpdate()
               .set(TABLE.FIELD_OF_INTEREST, record.get(TABLE.FIELD_OF_INTEREST))
               .execute(); // Actual execution is delayed until the end of the lambda
    }
}); // Now, all collected statements are batched together

相关问题