2017-07-28 17 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));