Как получить несколько средних значений с помощью репозитория jpa (весенняя загрузка) - PullRequest
0 голосов
/ 14 октября 2018

На основе потока: Spring Data 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;
}

Но у меня есть эта ошибка:

Ошибка при создании bean-компонента с именем averagesRepository: сбой вызова метода init;вложенное исключение - java.lang.IllegalArgumentException: проверка не удалась для запроса для метода public abstract mx.com.sk.pojos.AverajesPojo mx.com.sk.admin.repositories.AveragesRepository.getLastSurveyAverages (java.lang.String, java.lang).Долго)!

в чем моя ошибка?

1 Ответ

0 голосов
/ 14 октября 2018

Пожалуйста, используйте double вместо float в вашей структуре DTO, если вы хотите вернуть float из DTO, вы можете управлять им в вашей структуре.

Функция 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.groupName & a.idRemote, и тип возвращаемого значения должен быть таким же, как constrcuture, поскольку они имеют одинаковыезначения типа будут возвращены, но они будут соответствовать параметрам вашего запроса.так что им нравится ваша конструкция.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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...