Как вернуть список объектов вместо массива объектов из запроса Spring Data JPA GROUP BY - PullRequest
2 голосов
/ 25 октября 2019

Мой вопрос связан с этой веткой .

Ниже приведен метод моего репозитория с использованием группировки по некоторому полю:

@Query(value = "SELECT  t.test_id AS testId, COUNT(t.id) AS total FROM test_instances t GROUP BY t.test_id", nativeQuery = true)
public Object[] getTestStats();

Он работает и результат полученследующим образом:

[ [ 1, 2 ], [ 2, 1 ], [ 3, 2 ], [ 5, 1 ], [ 7, 2 ], [ 8, 1 ], [ 9, 1 ] ]

Но при замене типа возврата getTestStats () с Object[] на List<?> я получаю следующее сообщение об ошибке:

{
"cause": null,
"message": "Couldn't find PersistentEntity for type class [Ljava.lang.Object;!"]
}

Я хочуиспользовать List<?>, потому что, если он работает, я хочу использовать пользовательскую проекцию для приведения его к т. е. List<CustomProjection>

Я пробовал следующие типы возврата {List<?>, List<CustomProjection>, CustomProjection[]};но все возвращает одну и ту же ошибку. Надеюсь, кто-нибудь мне поможет, заранее спасибо.

1 Ответ

2 голосов
/ 25 октября 2019

Если вы хотите вернуть список, то:

  1. создайте конструктор, который содержит эти поля
  2. в вашем запросе, вы можете создать объект, который занял эти поля.

Например:

 Select new com.CustomObject(t.test_id, COUNT(t.id))

И в этом случае вы можете использовать List<CustomObject> вместо массива объектов

...