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

Я пытаюсь сделать что-то очень простое в PHP & Co: SELECT COUNT(x) как numItems, AVG(y) как среднее,... FROM Z

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

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

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


person Bunkerbewohner    schedule 29.05.2010    source источник


Ответы (2)


Вы получаете Object[] (или List<Object[]>). Из раздела 4.8.1 Тип результата пункта SELECT спецификации JPA 1.0:

Тип результата предложения SELECT определяется типами результатов содержащихся в нем select_expressions. Когда в предложении SELECT используется несколько выражений select_expressions, результат запроса имеет тип 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
person Pascal Thivent    schedule 29.05.2010
comment
Большое спасибо за ваш ответ! - person Bunkerbewohner; 30.05.2010

Вы также можете использовать Tuple и вернуть список Tuple (List<Tuple>), который вы можете использовать в качестве списка Map.

person Armando    schedule 08.04.2015