简体   繁体   English

jOOQ从连接表中返回POJO和ID

[英]jOOQ Return a POJO, and ID from from joined table

I've got a table WARNINGS_HISTORY which is a list of events, each event links to a WARNINGS row which contains details for the event. 我有一个表WARNINGS_HISTORY,它是一个事件列表,每个事件都链接到一个WARNINGS行,其中包含该事件的详细信息。 I've been able to retrieve a list of WARNINGS ( List<Warnings> ) which occurred in a specific time frame. 我已经能够检索在特定时间范围内发生的警告List<Warnings>List<Warnings> )。 But I also need to have the WARNINGS_HISTORY.ID. 但我还需要WARNINGS_HISTORY.ID。 So I need the below SQL to return something like Map<Integer, Warnings> , List<List<Integer, Warnings>> or List<List<WarningsHistory, Warnings>> where the Integer field is theWARNINGS_HISTORY.ID. 所以我需要以下SQL来返回Map<Integer, Warnings>List<List<Integer, Warnings>>List<List<WarningsHistory, Warnings>> ,其中Integer字段是WARNINGS_HISTORY.ID。

Any hints as to how to make this happen? 关于如何实现这一点的任何提示?

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);
}   

Write this: 写这个:

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)
            );
}   

The above makes use of ResultQuery.fetchMap(RecordMapper, RecordMapper) 以上使用ResultQuery.fetchMap(RecordMapper, RecordMapper)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM