Jooq:从SortField

时间:2017-07-28 11:32:55

标签: java sql jooq

我正在和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)   在行

我们有什么方法可以获得上面合并功能的价值吗?

1 个答案:

答案 0 :(得分: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));