You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jOOQ中使用多个set方法构造update语句并解决方法歧义报错

报错原因

你调用DSL.field()时没有指定字段对应的Java类型,返回的是无类型的Field<Object>对象。jOOQ的set()方法存在两个重载:set(Field<T>, T)、set(Field<T>, Field<T>),当传入无类型的Field<Object>时,两个重载都能匹配,就会触发方法歧义报错。

正确写法

推荐优先使用jOOQ代码生成的表、字段对象,原生带类型不会出现歧义问题:

DSL.using(connection)
    .update(DOGS)
    .set(DOGS.AGE, DOGS.AGE.add(1))
    .set(DOGS.RABIES, true)
    .where(DOGS.ID.eq("Kujo"))
    .execute();

如果没有使用代码生成,手动声明字段时指定明确的类型即可:

DSL.using(connection)
    .update(DSL.table("dogs"))
    .set(DSL.field("age", Integer.class), DSL.field("age", Integer.class).add(1))
    .set(DSL.field("rabies", Boolean.class), true)
    .where(DSL.field("id", String.class).eq("Kujo"))
    .execute();

内容的提问来源于stack exchange,提问作者stackoverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:06:07