我如何使用jooq的fetchMap返回的地图?

时间:2013-11-12 20:03:28

标签: java sql jooq

我使用的是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});

但现在,让我们说我的省份为2,星期数为42.我想从中创建一个记录,所以我可以做

ReportRecord report = results.get(record);

现在,我已切换到致电

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

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

1 个答案:

答案 0 :(得分: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 with #2847

中进行改进