Java:使用List从持久性查询语言中检索结果

时间:2011-08-10 13:45:09

标签: java list persistence

我使用JPQL查询数据库但我无法使用List检索“报告”表的行。这是我的代码的一部分:

...
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 个答案:

答案 0 :(得分:2)

您的查询未选择Report的实例。它会选择两个字段:r.titler.company。在这种情况下,JPA返回Object[]的列表。列表的每个Object[]都包含两个元素:标题和公司。

使用select r from Report r选择Report个实例。

答案 1 :(得分:0)

您需要创建一个TypedQuery。

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