jOOQ:从连接返回三个对象的列表
Posted
技术标签:
【中文标题】jOOQ:从连接返回三个对象的列表【英文标题】:jOOQ: returning list of three objects from joins 【发布时间】:2018-09-25 05:08:51 【问题描述】:这个问题是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));
如何从查询中获取结果?
【问题讨论】:
不是查询!这只是选择的步骤。您可以将这些数据用于下一个查询,也可以将其提取到对象中。它可以通过 JOOQ 模型列表或您的对象列表。 【参考方案1】:您在查询结束时缺少fetch()
呼叫。
【讨论】:
【参考方案2】:假设您可以使用类似“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());
【讨论】:
以上是关于jOOQ:从连接返回三个对象的列表的主要内容,如果未能解决你的问题,请参考以下文章
如何从反应式 MariaDB 连接创建 JOOQ DSLContext
在 JOOQ 中,如果我直接使用底层连接,我的事务状态是不是保持不变?