Значение поля собственного запроса в JPA

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

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

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

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

Спасибо

Ответы

Ответ 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"

Ответ 2

Зависит от реализации 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();

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