Как получить значение некоторых полей в собственном запросе (JPA)?
Например, я хочу получить имя и возраст таблицы клиентов:
Query q = em.createNativeQuery("SELECT name,age FROM customer WHERE id=...");
Примечание: я не хочу сопоставить результаты с объектами. Я просто хочу получить значение поля.
Спасибо
Собственный запрос с несколькими выражениями выбора возвращает Object[]
(или List
). Из спецификации:
3.6.1 Интерфейс запросов
...
Элементы результата Java Постоянный запрос, предложение SELECT которого состоит из более чем одного выбора выражение имеет тип
Object[]
. Если предложение SELECT состоит только из одного выражение выбора, элементы результат запроса имеет тип Object. Когда используются собственные SQL-запросы, SQL сопоставление набора результатов (см. раздел 3.6.6), определяет, сколько элементов (сущностей, скалярных значений и т. д.) вернулся. Если несколько элементов возвращены элементы запроса результат имеет типObject[]
. Если только один элемент возвращается в результате отображение набора результатов SQL или если указывается класс результата, элементы результата запроса введитеОбъект
.
Итак, чтобы получить имя и возраст в вашем примере, вам нужно сделать что-то вроде этого:
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 . Например, Hibernate делает это иначе, чем castor. Вот пример того, как это будет работать в Hibernate:
Query query = session.createSQLQuery(
"select s.stock_code from stock s where s.stock_code = :stockCode")
.setParameter("stockCode", "7277");
List result = query.list();
Я не думаю, что возможно получить плоское значение, такое как целое число... но это должно быть очень близко к этому.