2016-08-02 8 views
2

이벤트 목록 인 WARNINGS_HISTORY 테이블이 있습니다. 각 이벤트는 이벤트에 대한 세부 정보가 포함 된 WARNINGS 행에 연결됩니다. 특정 시간대에 발생한 경고 목록 (List<Warnings>)을 검색 할 수있었습니다. 하지만 WARNINGS_HISTORY.ID도 필요합니다. 그래서 나는 Map<Integer, Warnings>, List<List<Integer, Warnings>> 또는 List<List<WarningsHistory, Warnings>> 같은 Integer 필드가 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)