2017-08-25 85 views
0
Table<Record> myTable = DSL.table("myTable"); 
Table<Record> a = myTable.as("a"); 
Field<Integer> myField = DSL.field("myField", SQLDataType.INTEGER); 

a.field("myField"); // == null 
a.field("myField", SQLDataType.INTEGER); // == null 
a.field(myField); // == null 

我想在比較中使用表格表達式,類似於this。我正在使用jOOQ來生成SQL字符串;我沒有爲我的表類型使用它的代碼生成。如何從非生成的別名表中獲取字段?

回答

1

我剛纔看到this comment文檔中:

一個更好的解決辦法是任何這些:

Field MY_FIELD1 = field(MY_TABLE.getName() + ".MY_FIELD"); 
Field MY_FIELD2 = field(name(MY_TABLE.getName(), "MY_FIELD")); 

我認爲這本手冊的這一部分可能是你非常有幫助: http://www.jooq.org/doc/latest/manual/sql-building/names

這對我有用,但我需要做一些更改,因爲我使用的是類型安全的字段。我寫了這個幫手:

private <T> Field<T> field(final Table<Record> table, final Field<T> field) { 
    return DSL.field(DSL.name(table.getName(), field.getName()), field.getDataType()); 
}