【问题标题】:JOOQ Insert List of recordsJOOQ 插入记录列表
【发布时间】:2020-08-04 16:28:16
【问题描述】:

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

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

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

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

【问题讨论】:

  • values(Collection) 方法旨在用于单个记录插入的字段或值的集合。

标签: java jooq


【解决方案1】:

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

也许你可以做a batch execution

dslContext.batchInsert(recordList);

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

【讨论】:

  • 谢谢@LukasEder 我会编辑我的答案以更正它
【解决方案2】:

你也可以用 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() 则无法获得。

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 2020-03-18
    • 2019-06-05
    • 2012-05-11
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2021-11-06
    相关资源
    最近更新 更多