仅限于自我学习总结,有不完美。thanks~
一.出现原因
当使用JPA时,需要在JpaRepositoty<entity,id>,传入entity,只可以用于单表查询,如果使用原生SQL进行多表查询,并且将返回的结果直接映射为DTO的时候,会报 converter found capable of converting from type [org.springframework.data.jpa.repository.que 的错误。
二.解决办法
1. 接收返回值。
因为jpa的原生SQL的返回类型只能为List<Map>,Map,Object,不可以直接转换为对象,所以可以将返回值设置为List<Map<String,Object>>
2. 处理返回值
总结的方法有两种
2.1 使用ModelMapper
官网的介绍:ModelMapper is an intelligent, refactoring safe object mapping library that automatically maps objects to each other.
需要导入的依赖
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.0</version>
</dependency>
ModelMapper可以将类转换成所需要的DTO
2.2 使用 BeanUtils.populate()
import org.apache.commons.beanutils.BeanUtils;
这个方法会遍历map<key, value>中的key,如果bean中有这个属性,就把这个key对应的value值赋给bean的属性。
三.总结
用Map来接收sql的返回结果,然后在service层中来通过上面介绍的方法来将Map中的k,v(key标识field,V表示value),转换成所需要的DTO