如何使用JPA存储库获取多个平均值(Spring Boot)

时间:2018-10-14 03:06:10

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

基于线程:Spring Data JPA - Custom Query with multiple aggregate functions in result

我的jpa存储库中有此查询

if dict1["NSN"]==dict2["NSN"]:
    print("Equal")

在我的pojo构造函数中是:

@Query("SELECT new mx.com.sk.AveragesPojo(AVG(a.initial), AVG(a.initialEFSL), AVG(a.finalEFSL), AVG(a.entitySettlement)) FROM AveragesModel AS a WHERE groupName = :groupName AND idRemote = :idRemote")
    public AverajesPojo getLastSurveyAverages(@Param("groupName") String groupName, @Param("idRemote") Long idRemote);
}

但是我有这个错误:

  

创建名称为“ averagesRepository”的bean时出错:调用init   方法失败;嵌套的异常是java.lang.IllegalArgumentException:   验证方法公共摘要查询失败   mx.com.sk.pojos.AverajesPojo   mx.com.sk.admin.repositories.AveragesRepository.getLastSurveyAverages(java.lang.String,java.lang.Long)!

我怎么了?

1 个答案:

答案 0 :(得分:0)

请在DTO结构中使用double而不是float,如果要从DTO返回float,则可以在其结构中进行管理。

  

AVG函数将状态字段路径表达式作为参数   并计算该组中Sate字段的平均值。的   状态字段必须为数字,并且结果以Double形式返回。

public class AveragesPojo {
    private double initial;
    private double initialEFSL;
    private double entitySettlement;
    private double finalEFSL;

    public AveragesPojo(double initial, double initialEFSL, double entitySettlement, double finalEFSL) {
        super();
        this.initial = initial;
        this.initialEFSL = initialEFSL;
        this.entitySettlement = entitySettlement;
        this.finalEFSL = finalEFSL;
    }

}

也请使用a.groupNamea.idRemote,返回类型应与构造相同,因为它们将返回相同的类型值,但它们将取决于您的查询参数。所以让他们喜欢你的结构。 entitySettlementfinalEFSL

@Query("SELECT new mx.com.sk.AveragesPojo(AVG(a.initial), AVG(a.initialEFSL), AVG(a.entitySettlement), AVG(a.finalEFSL )) FROM AveragesModel AS a WHERE a.groupName = :groupName AND a.idRemote = :idRemote")
public AverajesPojo getLastSurveyAverages(@Param("groupName") String groupName, @Param("idRemote") Long idRemote);
}