我不知道这是否可行,但我试图将从JPA存储库查询的数据投影到DTO中
我有以下查询:
@Query(value =
"SELECT crop.id, count(*) as total " +
"FROM xxx.crop_sub_plot " +
"join crop on crop.id = crop_sub_plot.crop_id " +
"join sub_plot on sub_plot.id = crop_sub_plot.sub_plot_id " +
"where sub_plot.enabled = true " +
"group by crop_id " +
"order by total DESC;", nativeQuery = true)
List<CropUsedView> findCropsInUseOrderByDesc();
和DTO:
public class CropUsedView implements Serializable{
private BigInteger id;
private BigInteger total;
public CropUsedView() {
}
public CropUsedView(BigInteger id, BigInteger total) {
this.id = id;
this.total = total;
}
//getters && setters
我收到错误:
找不到能够从[java.math.BigInteger]类型转换为[net.xxx.crop.CropUsedView]类型的转换器
我真的不知道这是否可行,有什么建议吗?
编辑:这是我在mysql上运行查询时数据的返回方式,也就是我想要转换为DTO的方式:
答案 0 :(得分:0)
您的查询返回两个值:id和count(两者都可以映射到long
或BigDecimal
)。但是Hibernate,因为它没有直接映射到一个对象,只是返回BigDecimal[]
。
要解决此问题,您应该使用自定义映射器:UserType
(https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/usertype/UserType.html)。这允许您通过手动解析将任何响应映射到对象中。