代码之家  ›  专栏  ›  技术社区  ›  Nguyen Ngoc Tuan

Jooq:从SortField中提取值

  •  0
  • Nguyen Ngoc Tuan  · 技术社区  · 8 年前

    我正在与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())
    

    但当涉及到我的自定义字段时,它抛出一个异常,表示

    在行

    合并 作用

    1 回复  |  直到 8 年前
        1
  •  1
  •   Lukas Eder    8 年前

    这不是特定于jOOQ的。SQL就是这样工作的。您的行为是自然的,因为您没有选择该表达式:

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

    a , b c

    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));