【问题标题】:Jooq: Extract value from SortFieldJooq:从 SortField 中提取值
【发布时间】:2018-01-04 11:04:58
【问题描述】:

我正在使用 Jooq 进行分页。数据按多个字段排序,其中之一是字段上的自定义函数。例如,我有一个这样的 SortField:

DSL.coalesce(TABLE.COLUMN, 0).asc()

最终的 SQL 将如下所示:

SELECT a, b, c
FROM TABLE
WHERE condition
ORDER BY COLUMN_A ASC, coalesce(TABLE.COLUMN, 0) ASC

现在我想获取页面上最后一条记录的值。使用时适用于普通字段

record.getValue(field.getName())

但是当涉及到我的自定义字段时,它会抛出一个异常,说明

java.lang.IllegalArgumentException:不包含字段(合并) 在行中

我们有什么方法可以得到上述coalesce函数的值吗?

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    这不是 jOOQ 特有的。 SQL 就是这样工作的。你得到的行为是自然的,因为你没有选择那个表达式:

    SELECT a, b, c
    FROM TABLE
    WHERE condition
    ORDER BY COLUMN_A ASC, coalesce(TABLE.COLUMN, 0) ASC
    

    将生成 3 列:abc。示例:

    a   b   c
    ------------
    1   2   3
    4   5   6
    

    在该结果中,没有名为“coalesce”的列。如果您想拥有一个名为“coalesce”或类似名称的列,则需要对其进行投影。在 jOOQ 中:

    Field<Integer> coalesce = DSL.coalesce(TABLE.COLUMN, 0);
    
    for (Record record : DSL.using(configuration)
           .select(TABLE.A, TABLE.B, TABLE.C, coalesce)
           .from(TABLE)
           .where(condition)
           .orderBy(TABLE.A.asc(), coalesce.asc()))
        System.out.println(record.get(coalesce));
    

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 2014-11-10
      • 2017-02-04
      • 2017-08-23
      • 2021-02-17
      • 2017-06-09
      • 2014-04-16
      • 2016-10-25
      • 1970-01-01
      相关资源
      最近更新 更多