2013-08-29 70 views
4

实际上,我们使用fetchInto()将结果转换为对象列表。Jooq的自定义转换器结果

例如:

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(?); 

回答

3

要选择连接表源的所有字段,只需选择“无”:那么

Result<Record> result = 
sql.select().from(Tables.CUSTOMER) 
      .join(Tables.EMPLOYEE) 
      .on(...) 
      .fetch(); 

jOOQ将内省称为表源,并为大家列引用。创建POJO关系的一种方法是使用各种Result.intoGroups()方法之一。例如: -

Map<Integer, List<Customer>> map = 
result.intoGroups(CUSTOMER.EMPLOYEE_ID, Customer.class); 

这将产生一个地图,每EMPLOYEE_ID价值List<Customer>的POJO。

在一个侧面说明:与于DefaultRecordMapper调用任何映射操作,当你JOIN操作产生相同的列名两次(如CUSTOMER.IDEMPLOYEE.ID)如预期映射可能无法正常工作 - 为DefaultRecordMapper没有按”吨知道什么表特定列起源。

对于更加复杂的映射,你应该实现自己的RecordMapperProvider

+0

其实我想从两个表中的字段。 –

+0

我认为ModelMapper支持这个功能,但我试图将每个记录转换为自定义对象失败。任何帮助? http://modelmapper.org/user-manual/jooq-integration/ –

+0

恐怕jOOQ目前不支持将结果映射到POJO的一对多映射。以上提示是迄今为止您所能做到的最好的... –