jOOQ:从连接返回三个对象的列表

时间:2018-04-15 10:08:16

标签: java jooq

这个问题是jOOQ: returning list with join,groupby and count in single object的扩展,但现在有三个对象而不是两个。

select A.*, B.*, C.*
from A
left join B on B.aId = A.aId
left join C on C.bId = B.bId

具体示例

SelectWhereStep<Record> query = using(configuration())
        .select(Student.STUDENT.fields())
        .select(Volunteermatch.VOLUNTEERMATCH.fields())
        .select(Volunteer.VOLUNTEER.fields())
        .from(Student.STUDENT)
        .leftJoin(Volunteermatch.VOLUNTEERMATCH).on(Volunteermatch.VOLUNTEERMATCH.STUDENTID.eq(Student.STUDENT.STUDENTID))
        .leftJoin(Volunteer.VOLUNTEER).on(Volunteer.VOLUNTEER.VOLUNTEERID.eq(Volunteermatch.VOLUNTEERMATCH.VOLUNTEERID));

如何从查询中获取结果?

3 个答案:

答案 0 :(得分:0)

这不是查询!这只是Select的一步。您可以将此数据用于下一个查询,也可以将其提取到对象。它可以通过JOOQ模型列表或对象列表。

答案 1 :(得分:0)

查询末尾您错过了一个fetch()通话。

答案 2 :(得分:0)

假设您可以使用类似“ Triple”类的东西(下面我使用Apache Commons类),并假设您只想要第一个结果:

import org.apache.commons.lang3.tuple.Triple;

Record r = query.fetchAny();
return Triple.of(r.into(VOLUNTEER), r.into(VOLUNTEERMATCH), r.into(STUDENT));

如果您想要多个结果,则可能类似于:

query.fetchStream().map(r-> Triple.of(
  r.into(VOLUNTEER), r.into(VOLUNTEERMATCH), r.into(STUDENT) )
).collect(toList());