我只想在所接收的pojo中给定值不为null时更新列。
我要实现以下sql:
Update TABLE table_name SET column_name = COALESCE(value, column_name)
这是我用jooq写的函数
public int updateCompany(final Company company) {
return dslContext.update(COMPANY)
.set(COMPANY.REGISTERED_NAME, company.getRegisteredName())
.set(COMPANY.TRADING_NAME, coalesce(COMPANY.TRADING_NAME, company.getTradingName()))
.set(COMPANY.ADDRESS_ID, coalesce(COMPANY.ADDRESS_ID, company.getAddressId()))
.where(COMPANY.ID.eq(company.getId()))
.execute();
}
2条答案
按热度按时间s1ag04yj1#
除了simon martinelli发现的bug之外,这里的问题是没有过载
DSL.coalesce(T, Field<T>...)
,代码假定存在。不无道理,通常会有这样的超载。在这种情况下,没有历史原因。在Java6中,没有@SafeVarargs
然而,jooq3.14仍然支持java6。随着jooq3.15不再支持java6,这个问题可以得到解决。我为此创建了一个问题:https://github.com/jooq/jooq/issues/11690同时,必须使用
DSL.val()
,请参阅手册中有关绑定值的部分。例如
或者,使用等效的2参数
DSL.nvl(T, Field<T>)
函数,该函数没有此限制,因为它没有varargs参数。v2g6jxz62#
在update语句中
但在jooq查询中
所以你应该改变顺序