JOOQ - 使用RecordMapper映射单个记录

时间:2014-09-01 01:20:25

标签: java sql jooq

我无法使用RecordMapper mapper映射通过fetchOne / fetchAny检索的单个记录。

如果我使用例如(如在手册中)

List<Something> list =  create.selectFrom(TABLE).fetch().map(mapper);

它有效,

但如果我使用相同的映射器:

Something pojo = create.selectFrom(TABLE).fetchOne().map(mapper);

它没有编译。

感谢您的帮助

2 个答案:

答案 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);