演员表不能从列表<>

时间:2014-01-28 09:51:13

标签: java jpa

为什么这个演员会失败?因为我的结果是平均值列表。但显然需要一些魔法,因为java认为它是一个对象。

当进一步使用它时,似乎q.getResultList()调用会给我一个对象的原始列表,这对我来说很奇怪,因为它是一个TypedQuery。

TypedQuery<Average> q = em.createQuery("select p.id, p.lastName, p.firstName, c.name, s.serieDate, st.serie_type, st.serie_type_info, count(s.player.id), sum(s.result), avg(s.result) from Serie s, Player p, Club c, SerieType st " +
        " where p.id = s.player.id" +
        " and c.id = s.club.id " +
        " and st.id = s.serieType.id " +
        " and c.name like '%" + clubName + "%'" +
        " and st.serie_type like '%" + serieType.getSerie_type() + "%'" +
        " and st.serie_type_info like '%" + serieType.getSerie_type_info() + "%'" +
        " and s.serieDate > :startDate" +
        " and s.serieDate < :endDate" +
        " group by p.id, p.lastName, p.firstName, c.name, s.serieDate, st.serie_type, st.serie_type_info", Average.class);
        q.setParameter("startDate", calendarBean.getDate1());
        q.setParameter("endDate", calendarBean.getDate2());

这是电话

List<Average> resultList = q.getResultList();
List<Average> withAverages = CalculateAveragesClub(resultList);

private List CalculateAveragesClub(List<Average> results)   {
        for (Average average : results) { //error in this cast
}

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/BowlingFacelets] threw exception [[Ljava.lang.Object; cannot be cast to com.jk.hcp.Average] with root cause
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.jk.hcp.Average
    at com.jk.hcp.ServiceSeries.CalculateAveragesClub(ServiceSeries.java:508)

2 个答案:

答案 0 :(得分:1)

多一点搜索,我会找到

JPQL Create new Object In Select Statement - avoid or embrace?

认可哈维是为了引导我走向正确的方向。

答案 1 :(得分:0)

根据您发布的代码和错误,看起来该方法需要List<Average>,但List中的元素实际上是Object[]至少< / em>其中一个是)。

这是Ideone sample使用String类而不是Average重现问题。

确保Average中有List个对象。

由于q.getResultList()返回原始List(没有泛型类型),因此调用该方法的代码不会强制执行类型安全。

List<Average> resultList = q.getResultList();

修改 根据编辑,看起来JPA / Hibernate List返回Query。如果它是SQLQuery的Hibernate SELECT * from average_table,请务必在SQLQuery上调用addEntity()(以任何方便的方式),以便它返回{{ 1}}对象而不是包含查询中所有列的Object数组(或者如果合适,使用HQL / Criteria)。

Average

您可能会发现Hibernate Reference的Chapter 16 - Native SQL有用,特别是16.1.2. Entity queries