Java Запрос записи Hibernate для суммирования значений из списка - PullRequest
0 голосов
/ 06 февраля 2020

Из одного запроса findAllByName(personName) Я получаю обратно список объектов. Я хочу подвести их возраст. Поэтому я делаю что-то вроде этого:

  int sum =
                listPerson
                        .stream()
                        .mapToInt(PersonEntity::getAge)
                        .sum();

Я знаю, что могу использовать, например, EntityManager и Query:

   Query query = em.createQuery(
              "SELECT SUM(p.age) FROM PErson p");

Но это будет суммировать возраст всех сущностей.

Как можно вместо этого написать запрос для суммирования возраста человека из списка на основе аргумента?

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете написать функцию в вашем хранилище, которая будет возвращать тип Long или int (зависит от размера вашей базы данных) и снабжена пометкой @Query

@Query(value = "SELECT SUM(age) FROM Person", nativeQuery = true)
Long getAgeSum();

EDIT : После вашего редактирования текущий метод можно изменить следующим образом:

1) Список аргументов

@Query(value = "SELECT SUM(p.age) FROM Person p WHERE p.id IN :idList", nativeQuery = true)
Long getAgeSum(@Param("idList") List<String> idList);

2) Простые аргументы

@Query(value = "SELECT SUM(p.age) FROM Person p WHERE p.jobName=:jobNameParam", nativeQuery = true)
Long getAgeSum(@Param("jobNameParam") String jobNameParam);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...