Я пытаюсь сделать что-то, что легко как круг в PHP & Co: ВЫБЕРИТЕ КОЛИЧЕСТВО (x) как numItems, AVG (y) как среднее число... ОТ Z
В PHP я получил бы простой массив как [{numItems: 0, среднее число: 0}], который я мог использовать как это:
echo "Number of Items: " . $result[0]['numItems'];
Обычно в JPQL Вы только запрашиваете отдельные объекты или отдельные столбцы и получаете типы Списков, например List<SomeEntity>
или List<Long>
. Но что Вы получаете при запросах нескольких столбцов?
Вы получаете Object[]
(или List
). Из раздела 4.8.1 Тип результата предложения SELECT спецификации JPA 1.0:
Тип результата предложения SELECT определяется типами результатов select_expressions, содержащихся в нем. Когда несколько select_expressions используются в предложении SELECT, то результат запроса имеет тип
Object[]
, и элементы в этом результате соответствуют по порядку порядку их указания в предложении SELECT, а по типу - типу типам результатов каждого из select_expressions.
Если вам нужна сильная типизация, вы можете использовать выражение-конструктор в предложении SELECT. Из раздела 4.8.2 Выражения конструктора в предложении SELECT:
Конструктор может быть использован в списке SELECT для возврата одного или более экземпляров Java экземпляров. Указанный класс не обязан должен быть сущностью или быть сопоставлен с базой данных. имя конструктора должно быть полностью квалифицированным.
Если имя класса сущности указано в предложении SELECT NEW, то результирующие экземпляры сущностей находятся в новом состоянии.
SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count) FROM Customer c JOIN c.orders o WHERE o.count > 100