【问题标题】:jOOQ: returning list of three objects from joinsjOOQ:从连接返回三个对象的列表
【发布时间】: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 模型列表或您的对象列表。

标签: java 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());
    
    

    【讨论】:

      猜你喜欢
      • 2016-12-08
      • 2020-09-15
      • 1970-01-01
      • 2021-08-17
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2022-01-01
      相关资源
      最近更新 更多