JOOQ插入记录列表
JOOQ Insert List of records
目前我正在从 pojo 列表映射到记录,我希望能够一次插入多行。我怎样才能在 JOOQ 中通过一笔交易做到这一点?
List<Record> recordList = receiverList.stream().map(r -> {
return dslContext.newRecord(Table, r);
}).collect(Collectors.toList());
我尝试将列表放入 "values",但出现异常 "The number of values must match the number of fields"
dslContext.insertInto(Table).values(recordList);
您的错误是因为 .values(...) 正在等待字段值而不是 Record。
也许你可以 a batch execution :
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);
通过这种方式,您可以使用 returning() 取回插入的值,而使用 batchInsert() 则不会。
目前我正在从 pojo 列表映射到记录,我希望能够一次插入多行。我怎样才能在 JOOQ 中通过一笔交易做到这一点?
List<Record> recordList = receiverList.stream().map(r -> {
return dslContext.newRecord(Table, r);
}).collect(Collectors.toList());
我尝试将列表放入 "values",但出现异常 "The number of values must match the number of fields"
dslContext.insertInto(Table).values(recordList);
您的错误是因为 .values(...) 正在等待字段值而不是 Record。
也许你可以 a batch execution :
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);
通过这种方式,您可以使用 returning() 取回插入的值,而使用 batchInsert() 则不会。