【发布时间】:2021-10-22 00:30:07
【问题描述】:
我需要“更新”一个项目列表。
class Item {
private UUID id;
private UUID anotherId;
private List<String> things;
...
}
如果某个项目的id 和anotherId 已经存在,则其他值应替换为新项目。如果不是,则应将项目作为新记录插入。
我遇到了 JOOQ 的 batchMerge,我认为它类似于“upsert”。不幸的是,互联网上的文档很少,因为这是 JOOQ 在撰写本文时的一种相当新的方法。
我试过了
List<ItemRecord> items = ... //built from context.newRecord(ITEM) then added to a list
context.batchMerge(items).execute();
认为它会自动获取更新的字段。如果行已经存在,则值中没有更新。如果新记录尚不存在,它会插入一条新记录。
我遇到了merge 的文档,但我不知道如何将其翻译成batchMerge。 https://www.jooq.org/doc/3.1/manual/sql-building/sql-statements/merge-statement/
我对 SQL 和 JOOQ 还很陌生。我正在使用 PostgreSQL 作为数据库。
【问题讨论】:
-
我看到了
标签,但这真的和SQL 语言有关吗? -
您可以在 API 文档中找到您想知道的一切:jooq.org/javadoc/latest/org.jooq/org/jooq/…
-
Insert ... On Duplicate Key 可能有帮助吗?
标签: java sql postgresql jooq