如何使用 jpa 存储库(春季启动)获得多个平均值

我的 jpa 存储库中有此查询


@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);

}

在我的 pojo 构造函数中是:


public AverajesPojo(Float initial, Float initialEFSL, Float entitySettlement, Float finalEFSL) {

    super();

    this.initial = initial;

    this.initialEFSL = initialEFSL;

    this.entitySettlement = entitySettlement;

    this.finalEFSL = finalEFSL;

}

但我有这个错误:


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


我的错误是什么?


喵喵时光机
浏览 202回答 1
1回答

繁星coding

请在你的 DTO 结构中使用 double 而不是 float,如果你想从 DTO 返回 float 那么你可以在你的结构中管理它。AVG 函数将状态字段路径表达式作为参数,并计算组上的状态字段的平均值。状态字段必须是数字,结果以 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.groupName&a.idRemote并且返回类型应该与构造相同,因为它们具有相同的类型值将被返回,但它们将根据您的查询参数。所以让他们喜欢你的结构。entitySettlement和 finalEFSL:@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);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java