2016-08-02 2 views
2

Ich habe eine Tabelle WARNINGS_HISTORY, die eine Liste von Ereignissen ist, jedes Ereignis verknüpft mit einer WARNINGS-Zeile, die Details für das Ereignis enthält. Ich konnte eine Liste der WARNUNGEN (List<Warnings>) abrufen, die in einem bestimmten Zeitraum aufgetreten sind. Aber ich brauche auch die WARNINGS_HISTORY.ID. Also brauche ich die folgende SQL, um etwas wie Map<Integer, Warnings>, List<List<Integer, Warnings>> oder List<List<WarningsHistory, Warnings>> zurückgeben, wo das Integer-Feld theWARNINGS_HISTORY.ID ist.jOOQ Geben Sie einen POJO und eine ID aus der Joined-Tabelle zurück

Gibt es Hinweise, wie Sie das erreichen können?

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

Antwort

1

: Schreibe:

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

Das macht über den Einsatz von ResultQuery.fetchMap(RecordMapper, RecordMapper)

Verwandte Themen