这是我要执行的查询:
UPDATE TABLE users SET metadata = metadata - 'keyA' - 'keyB'
WHERE <condition>;
此处,metadata
的类型为jsonb
,-
运算符会从JSON对象中删除密钥。但是,当我在jooq中这样做时:
this.ctx.update(Tables.USERS)
.set(Tables.USERS.METADATA, "metadata-'keyA'-'keyB'")
.where(<condition>)
.execute();
我收到一条错误消息,指出value
是CHARACTER VARYING
而不是JSONB
,我猜测是因为查询是使用绑定值创建的,然后是整个字符串正试图插入而不是表达。
如何在jooq中执行此值表达式?
答案 0 :(得分:1)
您传递给set方法的内容:
"metadata-'keyA'-'keyB'"
...不是直接注入生成的SQL字符串的表达式。它是String类型的绑定变量(即VARCHAR
)。最简单的方法是使用“普通SQL”:
.set(USERS.METADATA, field(
"{0} - {1} - {2}",
USERS.METADATA.getDataType(),
USERS.METADATA, val("keyA"), val("keyB")
))
有关在jOOQ中使用“纯SQL”的更多信息,请参阅本手册的这一部分: http://www.jooq.org/doc/latest/manual/sql-building/plain-sql