gpt4 book ai didi

spring-boot - 在 JOOQ 中插入多行 + 返回 ID

转载 作者:行者123 更新时间:2023-12-05 03:31:47 29 4
gpt4 key购买 nike

我正在开发一个 Spring Boot 应用程序,我在其中使用 JOOQ 3.15.5 版与数据库进行通信。现在我试图在数据库中插入多行并将 ID 作为结果集。我怎样才能做到这一点?我尝试使用 valuesOfRecords 插入记录集合,但我无法让它工作,因为它迫使我放入 MY_TABLE 的所有字段,包括未知 ID。我试过:

context
.insertInto(MY_TABLE, MY_TABLE.ID, MY_TABLE.STATUS, MY_TABLE.NAME)
.valuesOfRecords(records)
.returningResult(MY_TABLE.ID)
.fetchInto(Long.class);

谢谢!

最佳答案

解决手头的问题

不必包含 ID柱子。为什么不直接写这个呢?

context

// No ID column here
.insertInto(MY_TABLE, MY_TABLE.STATUS, MY_TABLE.NAME)

// Use a Record2<?, ?> type here
.valuesOfRecords(records)
.returningResult(MY_TABLE.ID)
.fetchInto(Long.class);

如果你的记录是生成MyTableRecord您配置为扩展 Record3<?, ?, ?> ,您只需将所需内容映射到 Record2<?, ?> ,甚至是 Row2<?, ?> :

context
.insertInto(MY_TABLE, MY_TABLE.STATUS, MY_TABLE.NAME)
.valuesOfRows(records
.stream()
// An example mapping.
.map(r -> row(r.getStatus(), r.getName()))
.toList()
)
.returningResult(MY_TABLE.ID)
.fetchInto(Long.class);

jOOQ 3.15 org.jooq.Rows 实用程序有一些映射函数可以帮助处理这种情况。你甚至可以这样写:

context
.insertInto(MY_TABLE, MY_TABLE.STATUS, MY_TABLE.NAME)
.valuesOfRows(records
.stream()
.collect(Rows.toRowList(r -> r.getStatus(), r -> r.getName()))
)
.returningResult(MY_TABLE.ID)
.fetchInto(Long.class);

使用 3.16 只读列

从 jOOQ 3.16 开始,支持只读列:

如果 jOOQ 知道你的 ID列是只读的(如果它是标识列,它就是只读的),如果您相应地配置它,它将从此类语句中忽略它。

关于spring-boot - 在 JOOQ 中插入多行 + 返回 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70592407/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com