JPQL: Какие объекты содержит список результата при запросах нескольких столбцов?

Я пытаюсь сделать что-то, что легко как круг в PHP & Co: ВЫБЕРИТЕ КОЛИЧЕСТВО (x) как numItems, AVG (y) как среднее число... ОТ Z

В PHP я получил бы простой массив как [{numItems: 0, среднее число: 0}], который я мог использовать как это:

echo "Number of Items: " . $result[0]['numItems'];

Обычно в JPQL Вы только запрашиваете отдельные объекты или отдельные столбцы и получаете типы Списков, например List<SomeEntity> или List<Long>. Но что Вы получаете при запросах нескольких столбцов?

5
задан Pascal Thivent 26 June 2010 в 00:07
поделиться

1 ответ

Вы получаете 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
5
ответ дан 14 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: