【问题标题】:Jooq Java CTE wrong renderJooq Java CTE 错误渲染
【发布时间】:2020-11-03 15:19:50
【问题描述】:

我有从 DSL.values 创建的 CTE:

final RowN[] rowNS = tasksId
                .stream()
                .map(x -> DSL.row(x.toString()))
                .toArray(RowN[]::new);

        CommonTableExpression<Record1<String>> cte = DSL
                .name("cte")
                .fields("id")
                .as(DSL
                        .select(
                                DSL.field("id", String.class)
                        )
                        .from(
                                DSL.values(rowNS).as("temp", "id")
                        )
                );

然后我尝试使用它从数据库中获取所需的值

                dslContext
                        .with(
                                cte
                        )
                        .select(
                                DSL.field(TaskStateTable.taskId.getColumnName(), String.class),
                                DSL.field(TaskStateTable.state.getColumnName(), String.class)
                        )
                        .from(
                                DSL.table(tableNameProperties.getFullNameTableTaskState())
                        )
                        .join(
                                cte
                        )
                        .on(
                                DSL.field(tableNameProperties.getFullNameTableTaskState() + "." + TaskStateTable.taskId.getColumnName())
                                        .eq(cte.field("id"))
                        )
                        .fetchMap(
                                DSL.field(TaskStateTable.taskId.getColumnName(), String.class),
                                DSL.field(TaskStateTable.state.getColumnName(), String.class)
                        )

但我只有下一个错误

jOOQ; uncategorized SQLException for SQL [with cte(id) as (select id from ((select null id where 1 = 0) union all (select * from (values(cast(? as varchar))) temp)) temp) select task_id, state from rtm.task_state join cte on rtm.task_state.task_id = cte.id]

我想这是因为 (select * from (values(cast(? as varchar)))

如何解决? 其他没有 cte 的方法也可以正常工作。

【问题讨论】:

    标签: java postgresql h2 jooq


    【解决方案1】:

    问题就在那里:

    DSL.field("id", String.class)
    

    “Id”需要被DSL.name()包裹

    DSL.field(DSL.name("id"), String.class)
    

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 2012-07-26
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      • 2013-04-16
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多