public List findMyClientList(final String hql, final int offset,
final int length) {
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length);
List list = query.list();
return list;
}
});
return list;
}
hql:String queryString = "from CrmClients as a inner join  a.CrmProduct where a.userId = "+userId+" and a.nowStatus = "+nowStatus;这样返回的List 里面存的是object 怎么转换成 CrmClients
for(Object object : list){ CrmClients client = (CrmClients)  object; client.getCusName();
}
这样取会报java.lang.ClassCastException: [Ljava.lang.Object;

解决方案 »

  1.   

     把object中的值读出来,
    赋给client
      

  2.   

    循环读出来赋给bean 再到jsp再循环一次?
    有没有办法能直接赋给bean 到jsp直接
    <s:iterator value="utils.list"> 的方法?
      

  3.   

    如果你查询的结果是一个记录表中的记录的话。
    那么就可以返回一个泛型结果集么.
    如果结果包含多个表的信息,那么就需要这样处理
    for(Object object : list){            Object[]  objs= (Object[])  object;
                //objs[0],objs[1]就代表着你的字段信息。        }
      

  4.   

    貌似返回的list中并不是CrmClients。最好打断点,调试看看object到底有什么东西。
      

  5.   

    Iterator iter=list.iterator();
    while(iter.hasNext())
    CrmClients client=(CrmClients ) iter.next();
      

  6.   

    非常感谢,在jsp 中该如何循环?
      

  7.   

    如果你有这个CrmClients对象的话并做了关系映射,你这个方法返回的List集合其实就是CrmClients对象,直接拿出来用就可以了。
      

  8.   


    <many-to-one name="CrmProduct" column="productId" cascade="none" insert="false" update="false" class="cn.unjob.crm.form.CrmProduct" fetch="select">
            
            </many-to-one>当然有。加上inner join 就是object 不加就能crmclients
      

  9.   

    遍历就简单了,既然你能组装成一个泛型的List<Crmclients>
    那么页面中直接<s:iterator value="list" id="xx">
    <s:property value="xx.属性"/>
    或者通过jstl都可以!
    </s:iterator>
      

  10.   

    我来给一个jstl的例子那边执行hql得到list后,放到域中,如request.setAttribute("list", list);然后JSP页面中就可以这样
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
    <c:forEach items="${list }" var="item">
      ${item[0].cusName }, ${item[1].productName } <br/>
    </c:forEach>
      

  11.   

    Iterator it=list.iterator();
    while(it.hasNext()){
    Object [] obj = (Object [])it.next();
    CrmClients cm = (CrmClients ) obj[0];
    System.out.println(cm.getXX());
    CrmProduct cp = (CrmProduct ) obj[1];
    System.out.println(cp.getXX());
    }
      

  12.   

    from CrmClients as a inner join  a.CrmProductjoin后加fetch 返回CrmClients 对象,否则返回Object[]若不加fetch:
    for(int i=0;i<list.size();i++){   
    Object[] objArray=(Object[])list.get(i);   
    for(int j=0;j<objArray.length;j++){   
        if(objArray[j] instanceof CrmClients){   
           CrmClientsnote=(CrmClients)objArray[j];   
               
        }  
                if(objArray[j] instanceof CrmProduct){   
            CrmProduct note=(CrmProduct)objArray[j];   
                  
        }  
    }   
    }
      

  13.   

    问一下你的jdk版本是多少?确保你的jdk没有问题!
      

  14.   

    我们去看报的错误 是一个类型转换异常!那么我们在看你返回List集合的方法中有什么差错呢!
    public List findMyClientList(final String hql, final int offset,
                final int length) {
            List list = getHibernateTemplate().executeFind(new HibernateCallback() {
                public Object doInHibernate(Session session)
                        throws HibernateException, SQLException {
                    Query query = session.createQuery(hql);
                    query.setFirstResult(offset);
                    query.setMaxResults(length);
                    List list = query.list();
                    return list;
                }
            });
            return list;
        }很明显  在这段话里边你返回的只是一个list集合  集合在默认的情况下 储存的是Object类型的对象 ,那么在你取出数据的时候list中有的只是Object对象m所以以至你在循环遍历的时候出现类型转换错误  鉴于这种错误呢 楼主 最好的解决办法就是用强制类型集合 也就是List<你的类名>  list = new List<类名>();这样你在循环遍历的时候就不会报错误了!
      

  15.   

    哦  对了 忘了告诉楼主了  List<对象名>属于Java中的泛型集合 是在JDK2.0之后推出的   用途就是专门针对这种情况的  别听楼上的人们瞎忽悠你 放在数组里边 一样需要转换!另外List只是一个接口 你在实例化的时候需要你可以实例化List 也就是说不可以用 List<""> list  = new List<"">();  你需要去实例化他的实现类 ArrayList<"">  楼主要多学习!
      

  16.   


    看JDK的版本,可以用泛型比较方便!
      

  17.   

    你最好看一下JDK版本
    如果实在不想改的话 就改一下获取循环方式吧
    for(int i=0;i<list.size();i++){
       CrmClients crmClients=(CrmClients)list.get(i);
       client.getCusName();
    }