jOOQ - 支持 UPDATE ... SET ... 任意程度的查询

jOOQ - support for UPDATE ... SET ... query with arbitrary degree

我有两个功能:一个returns一个字段列表,另一个returns一个select查询(其中select是字段的对应值) .

private List<Field<?>> fields() {
    ....
}

private Select<?> select() {
    ...
}

请注意,度数是在运行时确定的,它取决于用户输入。因此 List<Field<?>>Select<?>.

可以插入 table:

context.insertInto(table, fields()).select(select()))

无法更新 table:

context.update(table).set(DSL.row(fields()), select())

可以将此功能添加到 jOOQ 3.7 中吗?

我们现在可以使用哪种解决方法?

不错,UpdateSetFirstStep DSL API, which accepts RowN as a first argument, the type returned from DSL.row(Collection) 上缺少一个方法。这应该为 jOOQ 3.7 修复: https://github.com/jOOQ/jOOQ/issues/4475

作为变通方法,如果您能忍受被黑客攻击的罪恶感,您可以转换为原始类型:

context.update(table).set((Row1) DSL.row(fields()), (Select) select())

您可以将 DSL.row(fields()) 转换为 Row1,因为 DSL.row(fields()) 返回的内部实现类型实现了所有 Row[N] 类型。