2013-07-16 65 views
4

當我當前使用Jooq進行查詢時,我明確將每個記錄對象轉換爲預期的記錄類型。從jooq到特定記錄的映射提取/結果

Result<Record> result = sql.select().from(Tables.COUNTRY).fetch(); 
for (Record r : result) { 
    CountryRecord countryRecord = (CountryRecord) r; 
    //Extract data from countryRecord 
    countryRecord.getId(); 
} 

是它與Jooq,可能對結果投直入所需的記錄型?

如(不編譯):

Result<CountryRecord> countryRecords = (Result<CountryRecord>) sql.select().from(Tables.COUNTRY).fetch(); 
for (CountryRecord cr : countryRecords) { 
    cr.getNamet(); 
    //etc... 
} 

回答

5

你不應該當你想獲取生成的記錄類型使用select().from(...)語法。改爲使用selectFrom()。這是記錄在這裏:

http://www.jooq.org/doc/3.1/manual/sql-execution/fetching/record-vs-tablerecord

所以您的查詢應該是:

Result<CountryRecord> countryRecords = sql.selectFrom(Tables.COUNTRY).fetch(); 
for (CountryRecord cr : countryRecords) { 
    cr.getNamet(); 
    //etc... 
} 
+0

謝謝,按預期工作。 – aksamit

5

@Lukas,

其實我們使用fetchInto()的結果轉換爲對象的名單。

例如:

Employee POJO匹配的數據庫表是僱員。

List<Employee> employeeList = sql.select(Tables.Employee) 
           .from(Tables.EMPLOYEE).fetchInto(Employee.class); 

同樣,我們如何轉換我們使用連接抓取的記錄?

例如:

Customer POJO匹配的數據庫表是customer

Employee pojo匹配數據庫表是employee

sql.select(<<IWantAllFields>>).from(Tables.CUSTOMER) 
           .join(Tables.EMPLOYEE) 
           .on(Tables.EMPLOYEE.ID.equal(Tables.CUSTOMER.EMPLOYEE_ID)) 
           .fetchInto(?);