JOOQ处理嵌套列表UPSERT

问题描述 投票:1回答:1

使用文件 此处 我知道我可以用 onDuplicateKeyUpdate 来处理UPSERT。但是,在插入一个列表值时,如何匹配值呢?我这里使用Postgres作为实际实现。

假设下面的Java采取嵌套List,然后启动一个JOOQ查询。

List<List<String>> values = List.of(List.of("1", "2", "3"), List.of("4", "5", "6"));

dsl.insertInto(TABLE)
        .values(values)
        .onDuplicateKeyUpdate()

接下来我必须调用 set() 中的流畅调用。然而,由于这是一个嵌套的列表,我无法在这里访问每一项。

例如,假设数据库中已经包含了这一行。

| col1 | col2 | col3 |
+------+------+------+
|   1  |   0  |   0  |
+------+------+------+

由于Col1是主键,我希望上面的代码能进行UPSERT并尝试插入,但在第一行就失败了。更新 col2 &amp。col3 分别进行插入。然后做第二个正常的插入。成为。

| col1 | col2 | col3 |
+------+------+------+
|   1  |   2  |   3  |
+------+------+------+
|   4  |   5  |   6  |
+------+------+------+

作为SQL这将是。

INSERT INTO table(col1, col2 col3)
((1, 2, 3), (4, 5, 6))
ON CONFLICT (col1)
DO UPDATE SET
col1 = excluded.col1,
col2 = excluded.col2,
col3 = excluded.col3

在JOOQ中有没有好的方法来处理这个问题?还是说我应该用原始的SQL,用值来代替绑定?

java sql postgresql jooq
1个回答
0
投票

这里有一个动态多值插入语句的待定功能请求。https:/github.comjOOQjOOQissues6604。

包括一些变通的讨论。今天是可以做的,只是不方便。注意,如果你只针对PostgreSQL,我建议你使用jOOQ的 ON CONFLICT 支持

© www.soinside.com 2019 - 2024. All rights reserved.