Spring JPA Projection - 从jpa存储库查询数据

时间:2018-06-08 13:49:36

标签: java spring hibernate jpa spring-data-jpa

我不知道这是否可行,但我试图将从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的方式:

enter image description here

1 个答案:

答案 0 :(得分:0)

您的查询返回两个值:id和count(两者都可以映射到longBigDecimal)。但是Hibernate,因为它没有直接映射到一个对象,只是返回BigDecimal[]

要解决此问题,您应该使用自定义映射器:UserTypehttps://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/usertype/UserType.html)。这允许您通过手动解析将任何响应映射到对象中。