如何使用 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();
在 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();