2013-07-16 33 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(?);