Jooq更新无主键表记录意外插入新记录

问题描述 投票:0回答:1

我有一个名为 result 的表,它没有主键(无法更改)。我想使用 Jooq 更新满足特定条件的所有记录。以下代码无法按我的预期工作。它插入新记录而不是更新现有记录,我不明白。

public Mono<Result> update(Result result, String name) {
        return Mono.from(ctx.update(RESULT)
                        .set(RESULT.STATUS, result.getStatus())
                        .where(RESULT.NAME.eq(name))
                        .returning()
                )
                .map(r -> r.into(Result.class));
mariadb jooq
1个回答
0
投票

jOOQ 3.18 在 MariaDB 10.5 中引入了

UPDATE .. RETURNING
的模拟,它本身不支持此语法:

简而言之,这种说法:

UPDATE t
SET a = b
WHERE p
ORDER BY o
LIMIT l
RETURNING x;

可以模拟如下:

INSERT INTO t
SELECT * FROM t WHERE p ORDER BY o LIMIT l
ON DUPLICATE KEY UPDATE SET a = b
RETURNING x;

但显然,这假设存在可以通过

ON DUPLICATE KEY
子句匹配的主键(或唯一键)。

© www.soinside.com 2019 - 2024. All rights reserved.