Java JOOQ处理嵌套列表UPSERT
使用我知道的文档,我可以使用Java JOOQ处理嵌套列表UPSERT,java,sql,postgresql,jooq,Java,Sql,Postgresql,Jooq,使用我知道的文档,我可以使用onDuplicateKeyUpdate来处理UPSERT。但是,在插入列表值列表时,如何匹配值?我在这里使用Postgres作为实际的实现 假设下面的Java接受一个嵌套列表,然后启动一个JOOQ查询 List value=List.of(List.of(“1”、“2”、“3”)、List.of(“4”、“5”、“6”); dsl.insertInto(表) .价值观(价值观) .onDuplicateKeyUpdate() 接下来,我必须在fluent调用中调用
onDuplicateKeyUpdate
来处理UPSERT。但是,在插入列表值列表时,如何匹配值?我在这里使用Postgres作为实际的实现
假设下面的Java接受一个嵌套列表,然后启动一个JOOQ查询
List value=List.of(List.of(“1”、“2”、“3”)、List.of(“4”、“5”、“6”);
dsl.insertInto(表)
.价值观(价值观)
.onDuplicateKeyUpdate()
接下来,我必须在fluent调用中调用set()
。但是,由于这是一个嵌套列表,我无法访问这里的每个项目
例如,假设数据库已包含此行:
| col1 | col2 | col3 |
+------+------+------+
| 1 | 0 | 0 |
+------+------+------+
由于Col1是主键,我希望上面的代码执行UPSERT并尝试插入,但在第一行失败。分别更新col2
和col3
。然后对第二个进行正常插入。成为:
| col1 | col2 | col3 |
+------+------+------+
| 1 | 2 | 3 |
+------+------+------+
| 4 | 5 | 6 |
+------+------+------+
与SQL一样,这将是:
插入到表中(col1、col2、col3)
((1, 2, 3), (4, 5, 6))
关于冲突(col1)
更新集
col1=排除在外。col1,
col2=排除在外。col2,
col3=排除在外。col3
在JOOQ中有没有处理这个问题的好方法?或者我应该使用原始SQL并绑定值吗?这里有一个关于动态多值插入语句的未决功能请求:
它包括一些变通方法讨论。今天可以做,只是不方便。请注意,如果您只针对PostgreSQL,我建议您使用jOOQ的冲突
支持动态多值插入语句有一个挂起的功能请求:
它包括一些变通方法讨论。今天可以做,只是不方便。请注意,如果您只针对PostgreSQL,我建议您使用jOOQ的冲突支持