public AllWmsInfo findAllWmsInfo(Integer start,Integer end){
tr=getTr();
Query query=session.createQuery("select p.productName,w from Product p,WmsInfo w where p.productId=w.productId");
List li=query.list();

System.out.println(li.size());
Iterator it=li.iterator();
while(it.hasNext()){
Object[] a=(Object[])it.next();
AllWmsInfo pp=(AllWmsInfo) a[0];
System.out.println(pp.getProductName());
}  
return null;
}
我要得到的AllWmsInfo对象
一直报错java.lang.String cannot be cast to wk.len.domain.AllWmsInfo
能够有什么办法等到AllWmsInfo对象  要怎么样修改
我AllWmsInfo 中包含productName 和WmsInfo中的 所有字段

解决方案 »

  1.   

    select p.productName,w from Product p,WmsInfo w where p.productId=w.productId
    改为
    select p.productName,w.* from Product p,WmsInfo w where p.productId=w.productId
      

  2.   

    select * from WmsInfo w where  w.productId in(select productId from Product)
      

  3.   

    select p.productName,w from Product p,WmsInfo w where p.productId=w.productId这个得到是两个东西,第一个是productName ,第二个才是WmsInfo,你将第一个强制转换为WmsInfo肯定回报异常的。改为:
    select w.* from Product p,WmsInfo w where p.productId=w.productId 
      

  4.   

    额,应该是While循环里AllWmsInfo pp=(AllWmsInfo) a[0];出的错吧?
    a[0] 是
    Query query=session.createQuery("select p.productName,w from Product p,WmsInfo w where p.productId=w.productId");
    查询出来的部分,是一个String,强制转换成AllWmsInfo当然要出错了!
    不知道仁兄是否对AllWmsInfo进行了持久化,看样子应该是没有
    String hql ="select p.productName,w from Product p,Wms w where p.productId = w.productId";
    List list = session.createQuery(hql).list();
    System.out.println(list.size());
    Iterator it = list.iterator();
    while(it.hasNext()){
    Object[] a = (Object[])it.next();
    AllWmsInfo info = new AllWmsInfo();
    info.setProductName((String)a[0]);
    info.setW((Wms)a[1]);
    System.out.println(info.getProductName()+"----"+info.getW().getProductId());
    }
    应该可以解决之。
      

  5.   

    我这个AllWmsInfo是自己创建的一个类 数据库里面没有这个表  但我想到的就是这东西 
      

  6.   

    我的AllWmsInfo里面没有w这个对象  只有wmsinfo这个对象的所有属性   不能够getW()  
    其实是可以一个一个set进去 但我觉得肯定有其他方法的  不然如果属性很多 那代码多恐怖
      

  7.   

    为什么如果我吧w该为w.*的时候 会报错
    expecting IDENT, found '*' near line 1, column 24 [select p.productName,w.* from wk.len.po.Product p,wk.len.po.WmsInfo w where p.productId=w.productId]
      

  8.   


    AllWmsInfo既然是2个类所有属性的写在一个类,你可以用hibernate的方法
    public List getListObject(final String sql, final Map para, final String type, final Class cls) {
    return (List) getHibernateTemplate().execute(new HibernateCallback() {
    public Object doInHibernate(Session session) throws HibernateException { Query query = session.createSQLQuery(sql);
    List list = query.list();
    return list; }
    }, true);
    }
      

  9.   

    试试transformer 楼主的俩个数据库表是这俩个吧?
    Product  和  WmsInfo 
    通过这id值相同的条件查询 所有的WmsInfo 类吧?
    p.productId = w.productId如果没理解错的话  试试用transformer一种使用sqlsql  就按照你查询数据库方式查询   不过要说的是、你WmsInfo表 里面的字段查出来要 as 给你AllWmsInfo 实体类里面的属性 (如果数据库表字段和类属性字段完全一样就不用as 了)Query sqlQuery = session.createSQLQuery(“你的sql语句”).setResultTransformer(new AliasToBeanResultTransformer(AllWmsInfo.class));二种使用hqlpublic List getAllList() {
    String hql =" from Product as p , WmsInfo  as w  where p.productId=w.productId";
     
     List list = session.createQuery(hql).list();
     List<AllWmsInfo> reList = new ArrayList<AllWmsInfo>();
     for(Object obj:list){
     Object[] o = (Object[])obj;
     AllWmsInfo all = (AllWmsInfo)o[0];
     reList.add(all);
     }
     return reList;
    }
      

  10.   

    HQL中不支持*,想用*就要用原生态sql语句
      

  11.   

    1、你对hibernate不熟悉
    2、public AllWmsInfo findAllWmsInfo(Integer start,Integer end){
    tr=getTr();
    Query query=session.createQuery("select p.productName,w from Product p,WmsInfo w where p.productId=w.productId");
    List li=query.list();System.out.println(li.size());
    Iterator it=li.iterator();
    while(it.hasNext()){
    Object[] a=(Object[])it.next();
    AllWmsInfo pp=(AllWmsInfo) a[0];
    System.out.println(pp.getProductName());
    }    
    return null;
    }
    我要得到的AllWmsInfo对象
    你的代码中,hql对与错我暂且不说,但是Object[] a=(Object[])it.next();这样你自己都写的是得到的object数组,a[0]又怎么可能是AllWmsInfo类型呢?
    你要循环,将a[0],a[1],a[2],a[3],a[4],a[5]等等分别拿出来,封装进入AllWmsInfo。