繁体   English   中英

Jooq:从SortField中提取值

[英]Jooq: Extract value from SortField

我正在与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:字段(行)不包含在行中

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

这并非特定于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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM