我无法使用RecordMapper mapper
映射通过fetchOne / fetchAny检索的单个记录。
如果我使用例如(如在手册中)
List<Something> list = create.selectFrom(TABLE).fetch().map(mapper);
它有效,
但如果我使用相同的映射器:
Something pojo = create.selectFrom(TABLE).fetchOne().map(mapper);
它没有编译。
感谢您的帮助
答案 0 :(得分:2)
这可能与仿制药有关。虽然Result.map()
采用RecordMapper<? super R,E>
参数类型,Record.map()
需要RecordMapper<Record,E>
,因为Record
没有R
的递归泛型类型定义。
换句话说,如果您想为Result.map()
和Record.map()
重复使用相同的映射器,遗憾的是,您需要将其设为RecordMapper<Record, E>
,这意味着您需要Result<TableRecord> result = DSL.using(configuration).newResult(TABLE);
result.add(record);
Something pojo = result.map(mapper).get(0);
。 ll会丢失记录类型的某些类型安全性。
解决方法是仅为了映射而创建新结果:
{{1}}
答案 1 :(得分:1)
Lukas Eder提供的替代解决方法可能是直接使用映射器:
TableRecord record = create.selectFrom(TABLE).fetchOne();
Something pojo = mapper.map(record);