我使用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
我做错了什么?为什么我不被允许进行投射?
答案 0 :(得分:2)
您的查询未选择Report
的实例。它会选择两个字段:r.title
和r.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();