2013-10-28 35 views
1

我正在做一個連接查詢jOOQ,其中我必須將兩個表中的列別名保持爲唯一的列名稱。在jOOQ中保留別名字段的類型信息

有沒有辦法規避當我對列進行別名時發生的信息丟失?或者更好的方式來實現jOOQ風格的列名衝突的目標?

當我做的所有別名域,所有類型的信息丟失:

List<Field<?>> columns = factory.select().from(t1j).limit(0).fetch().getFields(); 
List<Field<?>> aliases = new LinkedList<Field<?>>(); 
for (Field f : columns) { 
    Field alias = Factory.fieldByName(t1j.getName(), f.getName()) 
         .as(f.getName() + "_t1"); 
    aliases.add(alias); 
} 

// columns.get(0).getType() == "class java.lang.String" 
// aliases.get(0).getType() == "class java.lang.Object" 

回答

1

既然你只能從一個表t1j選擇,你也許能得到您的查詢結果的行類型<R extends Record>從那張桌子。

Row2<Integer, String> row = DSL.row(INT_FIELD, STRING_FIELD); 

然後,您可以使用該行式來表達更多的類型安全的SELECT語句:

Result<Record2<Integer, String>> result = 
DSL.using(configuration) 
    .select(row.field1().as("f1"), row.field2().as("f2")) 
    .from(t1j) 
    .limit(0) 
    .fetch(); 

行類型可以使用jOOQ 3.0中引入的各種DSL.row(...)方法來顯式構造

請注意,您似乎正在使用jOOQ 2.x,因此行類型尚未提供給您。

+0

所以答案是:對於jooq 2.6,沒有答案;但對於jooq 3.0,有:) – helt

+0

或多或少,是的:-)行級類型安全是JOOQ 3中最重要的功能添加 –