Группировка путем возврата списков или значений весной jpaJAVA

Программисты JAVA общаются здесь
Anonymous
Группировка путем возврата списков или значений весной jpa

Сообщение Anonymous »

Я пытаюсь сделать что-то очень простое, но почему-то не могу заставить это работать без собственного запроса.
Вот моя сущность:

Код: Выделить всё

public class A {
private long id
private String key
private UUID value
}
В моем репозитории есть следующий метод:

Код: Выделить всё

@Query(value = """
SELECT key as key,
ARRAY_AGG(value) AS values
FROM table_a
WHERE key IN (:keys)
GROUP BY key
""", nativeQuery = true)
List getValuesByKeys(Collection keys);
с

Код: Выделить всё

public interface MyProjection {
String getKey();
UUID[] getValues();
}
Он работает и возвращает мне список объектов MyProjection, но я хочу сделать его не собственным запросом. Я пробовал следующие варианты, но всегда получал эту ошибку:

Код: Выделить всё

Caused by: org.hibernate.query.SemanticException: 'WITHIN GROUP' or 'OVER' clause is mandatory for ordered set aggregate function: array_agg

@Query(value = """
SELECT new MyProjection(key, ARRAY_AGG(a.value))
FROM A a
WHERE a.key IN (:keys)
GROUP BY a.key
""")
List getValuesByKeys(Collection keys);
Я полагаю, что array_agg — не лучший метод, но я не могу найти никакой информации о правильном вызове.
Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/790 ... spring-jpa

Вернуться в «JAVA»