JPQL: Какие объекты содержат список результатов при запросе нескольких столбцов? - PullRequest
5 голосов
/ 30 мая 2010

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 30 мая 2010

Вы получаете 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
0 голосов
/ 08 апреля 2015

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

...