【问题标题】:jOOQ Return a POJO, and ID from from joined tablejOOQ 从连接表中返回一个 POJO 和 ID
【发布时间】:2016-12-08 11:49:21
【问题描述】:

我有一个表 WARNINGS_HISTORY,它是一个事件列表,每个事件都链接到一个包含事件详细信息的 WARNINGS 行。我已经能够检索到在特定时间范围内发生的警告列表 (List<Warnings>)。但我还需要有 WARNINGS_HISTORY.ID。所以我需要下面的 SQL 来返回类似 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);
}   

【问题讨论】:

    标签: java jooq


    【解决方案1】:

    这样写:

    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)

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 1970-01-01
      • 2017-06-29
      • 2023-04-07
      • 2017-01-07
      • 2020-09-15
      • 1970-01-01
      • 2014-11-05
      • 2021-05-30
      相关资源
      最近更新 更多