использование entityManager.createNativeQuery (запрос, foo.class)

Я хотел бы возвратить Список Целых чисел от a

javax.persistence.EntityManager.createNativeQuery звонить

Почему следующее является неправильным?

entityManager.createNativeQuery("Select P.AppID From P", Integer.class);

конкретно, почему я добираюсь "... Неизвестный объект: java.lang. Целое число"

Я должен был бы создать класс объекта, который имеет единственное поле, которое является Целым числом?

Спасибо

34
задан Manuel Drieschmanns 7 November 2017 в 20:54
поделиться

2 ответа

Что вы делаете, называется проекцией . Вот когда вы возвращаете только скалярное значение, которое принадлежит одному объекту. Вы можете сделать это с JPA. См. Скалярное значение .

Я думаю, что в этом случае пропускает тип сущности в целом возможно:

   Query query = em.createNativeQuery(  "select id from users where username = ?");  
   query.setParameter(1, "lt");  
   BigDecimal val = (BigDecimal) query.getSingleResult(); 

Пример, взятый из здесь .

47
ответ дан 27 November 2019 в 16:16
поделиться

Это можно сделать с помощью разреженных каталогов (также известных как неглубокие проверки ). Я не уверен на 100%, что это работает при использовании внешних устройств, но я не понимаю, почему это не так.

-121--2991162-

OfficeAutopilot имеет интересную версию webhooks.. они используют свой интерфейс правил для запуска публикаций API. Может срабатывать в ответ на любое системное событие.. электронная почта открывается, щелкает, посещает страницу, покупает и т.д.

-121--3384094-

Это не работает, так как второй параметр должен быть сопоставленной сущностью, и, конечно, Integer не является постоянным классом (поскольку в нем отсутствует аннотация @ Entity).

для вас следует сделать следующее:

Query q = em.createNativeQuery("select id from users where username = :username");
q.setParameter("username", "lt");
List<BigDecimal> values = q.getResultList();

или, если вы хотите использовать HQL, вы можете сделать что-то подобное:

Query q = em.createQuery("select new Integer(id) from users where username = :username");
q.setParameter("username", "lt");
List<Integer> values = q.getResultList();

С уважением.

36
ответ дан 27 November 2019 в 16:16
поделиться
Другие вопросы по тегам:

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