2011-08-10 3 views
1

Im запрос базы данных с использованием JPQL, но я не могу получить строки таблицы Report, используя List. Это часть моего кода:Java: получение результатов из языка запросов на сохранение, используя список

... 
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernate"); 
EntityManager em = emf.createEntityManager(); 
EntityTransaction tx = em.getTransaction(); 
tx.begin(); 
Query query = em.createQuery("SELECT r.title, r.company FROM Report as r"); 
    List<Report> itemList = query.getResultList(); 
    for (Report item : itemList) 
    { 
     System.out.println("Item: " + item.getCompany()); 
    } 

Выход:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to maps.Report at hello.Test.main(Unknown Source) 

Java Результат: 1

Что я делаю неправильно? Почему мне не разрешают делать кастинг?

ответ

2

В вашем запросе не указаны экземпляры Report. Он выбирает два поля: r.title и r.company. В этом случае JPA возвращает список Object[]. Каждый Object[] списка содержит два элемента: название и название компании.

Используйте select r from Report r, чтобы выбрать Report экземпляров.

+0

yup, большое спасибо! Я также нашел эту [ссылку] (http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/objectstate.html#d0e1152) в документации менеджера диспетчера гибернации о скалярных результатах и ​​о том, как справиться с ними. еще раз спасибо – giorgioca

0

Вам необходимо создать TypedQuery.

String sql = "select r from Report r"; 
TypedQuery<Report> query = em.createQuery(sql, Report.class); 
List<Report> reports = query.getResultList(); 
+0

Это не приведет к тому, что Hibernate будет магически изменять кортежи, выбранные в экземплярах отчета. –

+0

Это ясно из кода * после * инструкции OP CreateQuery, что OP делает ** не ** хочет кортежи. – Jeremy

+0

Я хочу сказать, что важно изменить HQL (который не является SQL, BTW), а не создавать TypedQuery. Его код будет в порядке, даже с нетипизированным запросом (у него будет только предупреждение о компиляторе). И учитывая его запрос HQL, я бы предположил, что OP хочет выбрать экземпляры отчета только с заполненными заголовками и полями компании, что невозможно. –

Смежные вопросы