jOOQ Return 一个 POJO,并且 ID 来自 from 加入 table
jOOQ Return a POJO, and ID from from joined table
我有一个 table WARNINGS_HISTORY,它是一个事件列表,每个事件都链接到一个 WARNINGS 行,其中包含该事件的详细信息。我已经能够检索到在特定时间范围内发生的警告列表 (List<Warnings>
)。但我还需要 WARNINGS_HISTORY.ID。所以我需要下面的 SQL 到 return 类似 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);
}
这样写:
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)
);
}
我有一个 table WARNINGS_HISTORY,它是一个事件列表,每个事件都链接到一个 WARNINGS 行,其中包含该事件的详细信息。我已经能够检索到在特定时间范围内发生的警告列表 (List<Warnings>
)。但我还需要 WARNINGS_HISTORY.ID。所以我需要下面的 SQL 到 return 类似 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);
}
这样写:
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)
);
}