[英]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.