【发布时间】:2021-02-05 21:31:50
【问题描述】:
使用 Jooq 3.13.5、Postgresql 10。
如果该行不存在,则插入查询将插入该行到数据库表中,并返回 id 列。
表:
创建描述符表( id 序列主键, 名称文本唯一 );
工作 SQL 查询:
INSERT INTO descriptor_table (name)
VALUES('a name')
ON CONFLICT("name")
DO UPDATE SET name=EXCLUDED.name
RETURNING id;
Java 代码:
DSLContext dsl = jooqProvider.getDSLContext();
dsl.transaction(configuration -> {
MyRecord
idValue =
DSL.using(configuration)
.insertInto(DESCRIPTOR_TABLE)
.set(DESCRIPTOR_TABLE.NAME, "a name")
.onConflict(Keys.DESCRIPTOR_TABLE_NAME_KEY.getFieldsArray())
.doUpdate()
.set(DESCRIPTOR_TABLE.NAME, "EXCLUDED.name")
.where(DESCRIPTOR_TABLE.NAME.eq("a name")))
.returning(DESCRIPTOR_TABLE.ID)
.fetchOne();
}
生成的 MyRecord 值为 null。
【问题讨论】:
标签: java postgresql jooq postgresql-10