Поле ' s значение собственного запроса в JPA

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

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

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

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

Спасибо

14
задан Pascal Thivent 30 August 2010 в 11:44
поделиться

2 ответа

Собственный запрос с несколькими выражениями выбора возвращает 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 1.0
    • Раздел 3.6.1 «Интерфейс запросов»
    • Раздел 3.6.6 «SQL-запросы»
23
ответ дан 1 December 2019 в 12:37
поделиться

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

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

-1
ответ дан 1 December 2019 в 12:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: