1

我正在使用 jooq,我喜欢 fetchMap(Field) 方法。如果我想使用单个字段作为键,它会很好用。现在,我想使用两个字段作为键来获取地图。fetchMap(Field[]) 方法返回一个以 Record 为键的映射。我有键中字段的值,但我不确定如何将它们转换为 Record 对象,以便我可以从地图中获取值。

基本上,我正在寻找一种从一组字段值中实例化记录的方法。

更多信息:我有一个省级报告表,一年中的每一周。表键是 (province_id, week_number)。我可以做这个...

DSLContext create = DSL.using(connection, SQLDialect.ORACLE);
Map<Record, ReportRecord> results = create.selectFrom(Tables.Report).fetchMap(new Field[]{Tables.Report.province_id, Tables.Report.week_number});

但是现在,假设我的省 ID 为 2,周数为 42。我想从中创建一个记录,所以我可以

ReportRecord report = results.get(record);

现在,我已经切换到呼叫

Result<ReportRecord> results = create.selectFrom(Tables.Report).fetch();

,迭代它,并自己创建一个地图。它正在工作,但我真的很想知道 fetchMap 方法是如何使用的。在 jooq 手册或 javadoc 中找不到任何内容。

4

1 回答 1

1

嗯,实际上没有一个非常简单的方法可以做到这一点。你可以做的是:

Record record = create.newRecord(Report.province_id, Report.week_number);
record.setValue(Report.province_id, 2);
record.setValue(Report.week_number, 42);
ReportRecord report = results.get(record);

同意,这有点冗长,而且对用户不太友好。这应该在jOOQ 3.3 中使用 #2847进行改进

于 2013-11-14T14:03:11.613 回答