Spring data JPA: как выполнять агрегатные функции - PullRequest
0 голосов
/ 19 декабря 2018

Я использую Spring Data JPA и у меня есть требование, где мне нужно выполнить SQL-запрос, как показано ниже:

select key_1, sum(key_2), sum(key_3) from table_1 
where key_1 in ('1', '2') and {dynamic_columns} group by key_1;

Для динамических столбцов я использую спецификации Spring Data JPA, но я не уверенКак я могу написать агрегатные функции, такие как sum () на нескольких столбцах.

1 Ответ

0 голосов
/ 19 декабря 2018

С помощью Spring Data JPA у вас есть несколько опций в хранилище пружин.

Ссылки: Baeldung - Данные пружины JPA Spring.io - Данные пружины JPA

Укажите собственный запрос

@Query(value="select key_1, sum(key_2) ...", nativeQuery=true)
Optional<Object[]> getAggregates;

Используйте поставщиков (HQL для языка запросов hibernate и т. Д.)

@Query(value="select e.key_1, sum(e.key_2) from entity e ...")
Optional<Object[]> getAggregates;

Здесь вы будете использовать объекты, потому что вы не возвращаетеконкретный объект, который вы добавляете пользовательские (совокупные) столбцы.Если вы возвращаете конкретную сущность с репозиторием JPA, вы можете вернуть эту сущность вместо Object [].Каждый элемент в массиве объектов будет соответствовать столбцу данных, если бы у вас здесь было несколько строк, вы бы использовали:

Optional<List<Object[]>> getAggregates;

Наконец, если вы не использовали опциональные возможности до того, как получите массив объектов с помощью:

if(objectsOptional.isPresent()) {
    Objects[] objects = objectsOptional.get();
    ...
}

Если это не то, что вы искали, мне понадобится дополнительная информация, чтобы помочь вам.

...