2017-07-28 15 views
0

我正在与Jooq进行分页。数据按多个字段排序,其中一个是现场自定义功能。例如,我有一个这样的的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异常异常:现场(聚结)不包含 在行

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

回答

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