2016-08-02 10 views
2

私はイベントのリストであるWARNINGS_HISTORYテーブルを持っています。各イベントはイベントの詳細を含むWARNINGS行にリンクしています。私は、特定の時間枠で発生した警告(List<Warnings>)のリストを取得することができました。しかし、私もWARNINGS_HISTORY.IDを持っている必要があります。だから、Map<Integer, Warnings>List<List<Integer, Warnings>>またはList<List<WarningsHistory, Warnings>>のような、整数フィールドがWARNINGS_HISTORY.IDのようなものを返すためには、以下のSQLが必要です。jOOQ参加したテーブルからPOJOと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); 
} 

答えて

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)

を使用しています
関連する問題