场景:
JPA封装的原生方法无法满足复杂SQL的操作,而使用原生SQL导致结果集转换不到自定义对象上,报错:(以下是各类报错种的一个)
No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type [***]
原因:
要么是 自定义的对象并没有对应实际存在的物理表,要么是 查询出来的字段并不能完全的填充自定义对象的属性。
解决:
**Repository里**
@Query(nativeQuery = true, value = "SELECT SUM(`count`) as `count`,DATE_FORMAT(update_time,'%Y') as `timeStr` FROM " +
"mobile_active_statistic WHERE DATE_FORMAT(update_time,'%Y') IN (?3) AND " +
"(module_tag=?1 AND func_tag=?2) GROUP BY DATE_FORMAT(update_time,'%Y')")
List<Map<String, String>> getByYear(String moduleTag, String funcTag, List<String> yearStr);
**ServiceImpl里**
List<Map<String,String>> byYear = mobileActiveStatisticRepository.getByYear(moduleTag, funcTag, years);
List<MobileStatisticQueryCollectDTO> roleListfinal = JSON.parseArray(JSON.toJSONString(byYear), MobileStatisticQueryCollectDTO.class);
注意:原生SQL写的时候一定要给字段起别名,别名一定要和最后使用FastJSON转换的自定义类的属性一致