如何在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
相关产品推荐
相关产品推荐

