Jooq中的条件onDuplicateKeyUpdate

时间:2016-04-26 13:26:01

标签: postgresql scala jooq on-duplicate-key

我尝试使用jooq dsl进行插入/更新查询。 我们的表中有一个唯一的(MemberId,GroupId)组合,以及一个组成员Enum。 在发送订阅请求时使用(MemberId,GroupId,RoleEnum) 查询应该向db插入一个新条目,但是如果MemberId,GroupId组合已经存在 - 那么只有在新RoleEnum大于现有条件时才更新条目。

我没有使用jooq Dsl的一个查询来做到这一点,所以我不得不使用两个查询(获取,然后相应地插入或更新),但后来我失去了操作的原子性......

有一种方法可以使用jooqDsl进行一次查询吗?

1 个答案:

答案 0 :(得分:3)

jOOQ通过以下方式模拟PostgreSQL 9.5对ON CONFLICT子句的支持:

    MySQL语法的
  • 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支持。