繁体   English   中英

JOOQ 插入记录列表

[英]JOOQ Insert List of records

目前我正在从 pojos 列表映射到 Record,并且我希望能够一次插入多行。 我如何在 JOOQ 中通过一笔交易做到这一点?

 List<Record> recordList = receiverList.stream().map(r -> {
        return dslContext.newRecord(Table, r);
    }).collect(Collectors.toList());

我尝试将列表放在“值”中,但出现异常“值的数量必须与字段的数量相匹配”

dslContext.insertInto(Table).values(recordList);

您的错误是因为 .values(...) 正在等待字段值而不是记录。

也许你可以做一个批处理执行

dslContext.batchInsert(recordList);

正如 Lukas 所提到的,它将在单个 jdbc 语句中执行,该语句是原子的

而不是 batchInsert 你也可以这样做:

var insertStepN = dslContext.insertInto(Table).set(dslContext.newRecord(Table, recordList.get(0));
for (var record : recordList.subList(1, recordList.size()) {
  insertStepN = insertStepN.newRecord().set(dslContext.newRecord(Table, record));
}
insertStepN.returning().fetch().into(YourClass.class);

这样,您可以使用返回()取回插入的值,而使用 batchInsert()则无法获得。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM