为什么这个演员会失败?因为我的结果是平均值列表。但显然需要一些魔法,因为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)
答案 0 :(得分:1)
答案 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。