jOOQ Return 一个 POJO,并且 ID 来自 from 加入 table

jOOQ Return a POJO, and ID from from joined table

我有一个 table WARNINGS_HISTORY,它是一个事件列表,每个事件都链接到一个 WARNINGS 行,其中包含该事件的详细信息。我已经能够检索到在特定时间范围内发生的警告列表 (List<Warnings>)。但我还需要 WARNINGS_HISTORY.ID。所以我需要下面的 SQL 到 return 类似 Map<Integer, Warnings>List<List<Integer, Warnings>>List<List<WarningsHistory, Warnings>> 的东西,其中整数字段是 WARNINGS_HISTORY.ID。

关于如何实现这一点的任何提示?

public List<Warnings> load(int maxId, LocalDateTime timestampStart,LocalDateTime timestampEnd) {
    return create.select(WARNINGS.fields())
            .from(WARNINGS_HISTORY)
            .innerJoin(WARNINGS).using(WARNINGS.SIDFILENAME)
            .where(WARNINGS_HISTORY.IID.greaterThan(maxId))
            .and(WARNINGS_HISTORY.DTCREATEDATE.greaterOrEqual(timestampStart))
            .and(WARNINGS_HISTORY.DTCREATEDATE.lessOrEqual(timestampEnd))
            .orderBy(WARNINGS_HISTORY.IID.asc())
            .fetch().into(Warnings.class);
}   

这样写:

public Map<Integer, Warnings> load(
        int maxId, 
        LocalDateTime timestampStart,
        LocalDateTime timestampEnd) {
    return create
            .select(WARNINGS.fields())
            .select(WARNINGS_HISTORY.ID) // Add the ID to the SELECT list
            .from(WARNINGS_HISTORY)
            .innerJoin(WARNINGS).using(WARNINGS.SIDFILENAME)
            .where(WARNINGS_HISTORY.IID.greaterThan(maxId))
            .and(WARNINGS_HISTORY.DTCREATEDATE.greaterOrEqual(timestampStart))
            .and(WARNINGS_HISTORY.DTCREATEDATE.lessOrEqual(timestampEnd))
            .orderBy(WARNINGS_HISTORY.IID.asc())
            .fetchMap(

                // Mapping the Map key is straight forward
                r -> r.get(WARNINGS_HISTORY.ID),

                // Mapping the Map value needs an extra step to avoid the ambiguity
                // between WARNINGS.ID and WARNINGS_HISTORY.ID when you use into(Class),
                // i.e. when you use jOOQ's DefaultRecordMapper
                r -> r.into(WARNINGS).into(Warnings.class)
            );
}   

以上利用了ResultQuery.fetchMap(RecordMapper, RecordMapper)