我尝试使用jooq dsl进行插入/更新查询。 我们的表中有一个唯一的(MemberId,GroupId)组合,以及一个组成员Enum。 在发送订阅请求时使用(MemberId,GroupId,RoleEnum) 查询应该向db插入一个新条目,但是如果MemberId,GroupId组合已经存在 - 那么只有在新RoleEnum大于现有条件时才更新条目。
我没有使用jooq Dsl的一个查询来做到这一点,所以我不得不使用两个查询(获取,然后相应地插入或更新),但后来我失去了操作的原子性......
有一种方法可以使用jooqDsl进行一次查询吗?
答案 0 :(得分:3)
jOOQ通过以下方式模拟PostgreSQL 9.5对ON CONFLICT
子句的支持:
insertInto(...).values(...).onDuplicateKeyUpdate()...
。只有在使用显式主键信息生成表时,才可以执行此操作。 (https://github.com/jOOQ/jOOQ/issues/5093,自jOOQ 3.8)mergeInto(...).key(...).values(...)
H2语法。使用此语法,您可以提供显式键列列表规范,因此不需要代码生成器来提供约束元信息。 (https://github.com/jOOQ/jOOQ/issues/4464,自jOOQ 3.7)。不幸的是,jOOQ中还没有任何原生ON CONFLICT
支持。