JOOQ:无需额外往返计算分页元数据时忽略未映射字段
解决方法
最简单的处理方式是在fetchGroups中手动指定映射逻辑,跳过total字段直接构造MyProjection对象,无需修改原有的MyProjection类。
修改后的代码示例
Map<Integer, List<MyProjection>> result = dslContext.selectDistinct( count().over().as("total"), ID, NAME ) .from(TABLE) .fetchGroups( field("total", Integer.class), // 手动映射Record到MyProjection,仅提取需要的字段 record -> new MyProjection(record.get(ID), record.get(NAME)) );
原代码报错原因
默认的DefaultRecordMapper会尝试将查询返回的所有字段(total、id、name)映射到MyProjection类,但MyProjection的构造方法只接收id和name两个参数,没有匹配的构造逻辑处理total字段,因此抛出映射异常。
说明
由于使用了窗口函数count().over(),查询结果中所有行的total值都是相同的(即总记录数),因此最终得到的Map中只会存在一个键值对,键为总条数,值为所有MyProjection对象的列表。
内容的提问来源于stack exchange,提问作者Михаил Катков
相关产品推荐
相关产品推荐

