实际上我们正在使用 fetchInto()
将结果转换为对象列表。
例如:
Employee
pojo匹配数据库表为employee。
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(?);
最佳答案
要从连接表源中选择所有字段,只需选择“无”:
Result<Record> result =
sql.select().from(Tables.CUSTOMER)
.join(Tables.EMPLOYEE)
.on(...)
.fetch();
然后 jOOQ 将自省(introspection)已知的表源并为您生成所有列引用。创建 POJO 关系的一种方法是使用各种 Result.intoGroups()
中的一种。方法。例如:
Map<Integer, List<Customer>> map =
result.intoGroups(CUSTOMER.EMPLOYEE_ID, Customer.class);
这将生成 List<Customer>
的 map 每个 EMPLOYEE_ID
的 pojo值(value)。
旁注:与任何调用 DefaultRecordMapper
的映射操作一样,当您的 JOIN
时,映射可能无法按预期工作操作产生两次相同的列名(例如 CUSTOMER.ID
和 EMPLOYEE.ID
) - 作为 DefaultRecordMapper
不知道特定列来自哪个表。
对于更复杂的映射,您可能应该实现自己的 RecordMapperProvider
关于java - Jooq 结果的自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510277/