id   parebtid  g_name     g_id
1      0       日用产品 001
2      1       铅笔     002
1、String sql = "select g.g_id,g.g_name,s.g_name from mis_goods g,mis_goods s where s.id = g.parentid ";2、Query query = session.createSQLQuery(sql);
3、list = query.list();
for(int i =0;i<list.size();i++){
}这样写第二句老出错,该怎么解决啊?
如果使用4、String sql = "select g.*,s.* from mis_goods g,mis_goods s where s.id = g.parentid ";
这样写第二句不会出错,但是遍历list里的值for(){}怎么写啊?

解决方案 »

  1.   

    如果不使用for循环的话
    1、Interator it =list.iterator();
    2、while(it.hasNext()){
    3、MisGoods goods= (MisGoods)it.next();
    4、   System.out.println(goods.getG_name());
    }
    第三句就会报错
    严重: Servlet.service() for servlet default threw exception
    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.szmis.bean.MisGoods
    at com.szmis.actions.MisGoodsAction.selectAllGoodsssExecute(MisGoodsAction.java:412)
      

  2.   

    跟for没有多大关系,sql查询获得的是MisGoods对象?
      

  3.   


    用hibernate写Hql时,是对 对象的查询,不能写表字段
      

  4.   

    是用sql查询 类型不匹配么
      

  5.   

    那该怎么写,我要得到两个g_name,使用对象查询怎么写?
      

  6.   

    你用的是createSQLQuery 要用sql语句,不能用Hql  ,用this.createQuery()就可以了。
      

  7.   

    Object.SQL查询出是这个.你可以像JDBC那样
    将查询结果再放入新的对象中new MisGood(),
    或者
    createSQLQuery(sql).addEntity(xx.class);
    比如:session.createSQLQuery("select g.id,g.name from good as g").addEntity(MyGood.class);
    至于你说的第一个问题,为什么换成*就可以了.可能是数据库字段名和你的实体名不太一样吧.
      

  8.   

    session.createSQLQuery("select g.id,g.name from good as g").addEntity(MyGood.class); 
    这样写是没错。但是sql语句是这样的
    String sql ="select g.g_id,g.g_name,s.g_name from mis_goods g,mis_goods s where s.id = g.parentid ";
    session.createSQLQuery(sql).addEntity(MyGood.class);也是报一样的错误啊
      

  9.   

    LZ为何不用HQL而用SQL查询?
    SQL的查询结果是Object[]的List
    而不能使用对象的方式取得。for (int i=0;i<list.size();i++){
       Object[] o=list.get(i);
       System.out.println(o[0]);
       System.out.println(o[1]);
       System.out.println(o[2]);
       ...
    }
      

  10.   

    楼上,String sql ="select g.g_id,g.g_name,s.g_name from mis_goods g,mis_goods s where s.id = g.parentid ";
    用HQL怎么写?对象类是MisGoods,字段跟表是一样 的
      

  11.   

    17楼,我也这样写过Object[] o=list.get(i)就不对了
      

  12.   

    急聘 兼职网络信息回复员(若干名)100元/天 工资日结招聘人数: 若干名  薪资待遇: 工作每天3-5小时,100元/天工资每日支付;
    岗位描述: 负责公司所要求的信息回复工作(有内容样版),工作地点不限,专兼职均可!
    应聘要求: 上网熟练,平均每天工作投入约3小时,具体根据效率自定; 学历不限,在
    职或学生皆可;勤奋,认真,有责任感;熟悉用电脑发消息的整个流程。(很简单,学一下就会!) (入职不需交任何押金,手续费,更不会拖欠工资) 详情看公司招聘:http://www.wi11.cn/?22461.htm邮箱:[email protected]
      

  13.   


    for(Iterator it = list.iterator(); it.hasNext();){
    Object[] obj = (Object[]) it.next();
    System.out.println(obj[0]);//第一个表
    System.out.println(obj[1]);//第二个表
    }
      

  14.   

    顶下!共同学习hibernate!sql和hql语句差别在hibernate中比较大!
      

  15.   

    不能直接这样写select g.g_id,g.g_name,s.g_name from mis_goods g,mis_goods s where s.id = g.parentid 
    你可以在你的实体类中加入 构造方法,将你想查的参数,放入到对象中!
    举个例子说
    实体类Mis_goods
    public class Mis_goods {
         private String g_id;
         private Stirng g_name;
         
          省略一些setget方法     public Mis_goods() {}
         public Mis_goods(String g_id, String g_name) {
             this.g_id = g_id;
             this.g_name = g_name;
          }
    }String hql = "select new Mis_goods(g.g_id, g.g_name) from Mis_goods"; 
            ……
    session.createQuery(hql) 
            ……
    这样写就是正确的了,也就说如果你想查询指定的字段时,需要把那些歌字段放到对象中去。Map等集合中也是可以(你可以在网上查一下用法)希望能对你有所帮助,一起进步!
      

  16.   

    我要用到两个g_name啊,一个是parent 一个是son 这样Hql怎么写?
      

  17.   

    整个的实体设计就有问题
    需要注意是N对1 还是N对M的关系