Значение поля собственного запроса в JPA - PullRequest
14 голосов
/ 30 августа 2010

Как получить значение некоторых полей в собственном запросе (JPA)?

Например, я хочу получить имя и возраст таблицы клиента:

Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=...");

Примечание: Я не хочу отображать результаты на объекты.Я просто хочу получить значение поля.

Спасибо

Ответы [ 2 ]

23 голосов
/ 30 августа 2010

Собственный запрос с несколькими выражениями выбора возвращает Object[] (или List<Object[]>). Из спецификации:

3.6.1 Интерфейс запроса

...

Элементы результата Java Постоянный запрос, чье предложение SELECT состоит из более чем одного выбора выражения имеют тип Object[]. Если предложение SELECT состоит только из одного выберите выражение, элементы результат запроса имеет тип Object. когда родные запросы SQL используются, SQL отображение набора результатов (см. раздел 3.6.6), определяет, сколько элементов (объектов, скалярных значений и т. Д.) вернулся. Если несколько предметов возвращены элементы запроса результат имеет тип 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-запросы"
0 голосов
/ 30 августа 2010

Зависит от реализации JPA. Hibernate делает это не так, как касторовое, например. Вот пример того, как это будет работать в Hibernate:

Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode")
.setParameter("stockCode", "7277");
List result = query.list();

Я не думаю, что можно получить значение плоскости, такое как целое число ... но это должно быть очень близко к нему.

...