从网上看到:
Query query = session.createSQLQuery("select state  ,count(*) as vs from wzsite group by state");
//1、将查询结果转换成List<Map<字段名,字段值>>   
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); 
//2、将结果转换成指定的bean   List<你的指定javaBean>   
query.setResultTransformer(Transformers.aliasToBean(LineData.class)); 
List<LineData> lineDataList = query.list();
for(LineData lineData : lineDataList){
   System.out.println("dddd = " + lineData.getVs());
}这种方式,我的LineData类中的两个属性是
private int state;
private int vs;
结果测试的是他老是报异常:org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of gan.ism.vo.LineData.vs
org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104)
org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:95)
org.hibernate.hql.HolderInstantiator.instantiate(HolderInstantiator.java:69)
org.hibernate.loader.custom.CustomLoader.getResultList(CustomLoader.java:330)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2108)
org.hibernate.loader.Loader.list(Loader.java:2103)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1696)
org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
gan.ism.business.impl.WzSiteManagerImpl.getLineDataList(WzSiteManagerImpl.java:71)
org.apache.jsp.test_jsp._jspService(test_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
root cause java.lang.IllegalArgumentException: argument type mismatch
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:95)
org.hibernate.hql.HolderInstantiator.instantiate(HolderInstantiator.java:69)
org.hibernate.loader.custom.CustomLoader.getResultList(CustomLoader.java:330)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2108)
org.hibernate.loader.Loader.list(Loader.java:2103)
org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1696)
org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
gan.ism.business.impl.WzSiteManagerImpl.getLineDataList(WzSiteManagerImpl.java:71)
org.apache.jsp.test_jsp._jspService(test_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

解决方案 »

  1.   

    Return the query results as a List. If the query contains multiple results pre row, the results are returned in an instance of Object[]. 返回来是一个Object[]
      

  2.   

    List<LineData> lineDataList = query.list();query.list()会试图把查询结果封装成一个LineData对象数组,LineData类里面的setter方法就会调用,估计是这里出问题了
      

  3.   

    顶下
    貌似是参数类型不匹配导致set方法调用失败
      

  4.   

    其实是这样的,那里报的异常不是参数类型不匹配吗,
    所以我改了一下
    Query query = session.createSQLQuery(
    "select state  ,count(*) as vs from wzsite group by state")
    .addScalar("state", Hibernate.INTEGER).addScalar("vs",Hibernate.INTEGER);这样就OK了