Ответ 1
Собственный запрос с несколькими выражениями select возвращает Object[]
(или List<Object[]>
). Из спецификации:
3.6.1 Интерфейс запросов
...
Элементы результата Java Запрос на сохранение, предложение SELECT состоит из более чем одного выражения имеют тип
Object[]
. Если предложение SELECT состоит только из одного выберите выражение, элементы Результат запроса имеет тип Object. когда используются собственные SQL-запросы, SQL отображение набора результатов (см. раздел 3.6.6), определяет, сколько элементов (объектов, скалярных значений и т.д.) вернулся. Если несколько элементов return, элементы запроса результат имеет типObject[]
. Если только один элемент возвращается в результате отображение результирующего набора SQL или если задан класс результата, элементы результата запроса типObject
.
Итак, чтобы получить имя и возраст в вашем примере, вам нужно сделать что-то вроде этого:
Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id = ?1");
q.setParameter(1, customerId);
Object[] result = (Object[])q.getSingleResult();
String name = result[0];
int age = result[1];
Ссылки
- Спецификация JPA 1.0
- Раздел 3.6.1 "Интерфейс запросов"
- Раздел 3.6.6 "Запросы SQL"