如何使用 jOOQ 更新 PostgreSQL 上复合列的单个子字段?

How to update an individual subfield for on a composite column on PostgreSQL using jOOQ?

the PostgreSQL documentation 上有一个关于如何更新复合类型的子字段的示例:

We can update an individual subfield of a composite column:

UPDATE mytab SET complex_col.r = (complex_col).r + 1 WHERE ...;

假设我们正在使用 jOOQ 和代码生成,那将如何转换为 jOOQ 代码?

从 jOOQ 3.15 开始,还没有 API 允许访问 UDT 的成员:https://github.com/jOOQ/jOOQ/issues/228

与往常一样,您可以使用 plain SQL templating:

轻松解决此缺失的功能
Field<Integer> r = field("({0}).{1}", COMPLEX_TYPE.R.getDataType(), 
    MYTAB.COMPLEX_COL.getUnqualifiedName(), 
    COMPLEX_TYPE.R.getUnqualifiedName()
);

ctx.update(MYTAB)
   .set(r, r.plus(1))
   .where(...)
   .execute();