String sql ="select * from icp_main_msg m inner join icp_website_msg w on m.icp_main_id=w.icp_main_id";
   list = session.createSQLQuery(sql).list();
   return list;   这里我不懂如果是这样 list里 返回的是什么?
   我要怎么才能把list解析出来?
   for(int i = 0 ; i<list.size; i++){
           我应该在这里放什么类型???XXX = list.get(i);
   }   wmlearnjava 谢谢大家了

解决方案 »

  1.   

    好像是Object[],是的话循环一下看看值不是的话,打印.getClass().getName()看看是什么类
      

  2.   

    不建议写sql方式,既然使用了Hibernate就应该 OO 一点了返回的是Object数组,可以自己取值在封装成List<Pojo>的形式
      

  3.   

    我也没在hibernater里写过sql语句,顶顶
      

  4.   

    list里放的是Object数组,每个object数组中存放的是你选出来的字段值,另外还是复杂的sql还是直接用sql吧,hibernate的hql你用不好的话,容易出现N+1的问题,还有就是出现冗余连接的问题
      

  5.   

    该需求返回的是一个list,该sql是一个多表的查询。而其没有指定其转换的类型。其返回的list的size是1;但是他里面有一个object数组;
    例如:
     List list=方法返回的list;
    for (Iterator it = list.iterator(); it.hasNext() ; )
    {
    Object[] object = (Object[])it.next();
    for(int i=0;i<object.length;i++) {
    log.debug("==============>>>"+((Shpqxx)object[i]).getMc());
    }
      

  6.   

    如果你让Hibernate在使用SQL进行查询时不指定其中字段所属的实体,那得到的是一系列Object[]的数组。
    这句SQL里面的表icp_main_msg和icp_website_msg,假定分别对应实体对象MainMsg和WebMsg。String sql ="select {m.*},{w.*} from icp_main_msg m inner join icp_website_msg w on m.icp_main_id=w.icp_main_id"; 
    SQLQuery query = session.createSQLQuery(sql);
    query.addEntity("m",MainMsg.class);
    query.addEntity("w",WebMsg.class);
    List results = query.list();这样你得到的List里面还是一系列Object[]数组,不过现在每个数中包含两个对象,MainMsg和WebMsg的实例。
      

  7.   

    for(int i=0;i<list.size();i++){
         Object[] objs=(Object[])list.get(i);
         for(int j=0;j<objs.length;j++){
             system.out.println(objs[j]);
         }
    }
      

  8.   

    返回Object[]  ,数组中顺序是按你sql的顺序
      

  9.   

    返回的是一个Object[],如果你这里只是单纯的获取数据,你这样查肯定是不好操作的,怎么不用hibernate的映射关系呢、、、那样还好操作点、、、
      

  10.   

    Query query = this.getSession().getNamedQuery("detilQuery");
    // query.setLong(0, id);
    // List result = query.list();
    // Iterator it = result.iterator();
    // while (it.hasNext()) {
    // Object[] results = (Object[]) it.next();
    // Bid bid = (Bid) results[0];
    // tender = (Tender) results[1]; 
    // }
      

  11.   

    list里面是一个个的数组、每一个数组包含别名为m和w的两张表的entity
      

  12.   

    hibernate里面返回的list默认的应该是object类型的吧?只不过上述的数据是来自两个表的关联数据..个人拙见
      

  13.   

    写原生sql返回的是数组,但hibernate也提供了泛型,下面是一个例子注意 :如果列是*的话有点小问题
    *包括两张表的字段T泛型类也要和*对应.
    一般的情况都有hql解决,如果不会可以学,不然的话使用hibernate没有什么意义了
    public <T> List<T> selByNativeQuery(T t, String sql, Object args[]) {
    Session session = null;
    try {
    session = getSession();
    SQLQuery query = session.createSQLQuery(sql);// 创建本地查询对象 参数为sql字符串语句
    query.addEntity(t.getClass());// 把返回值转换成指定的实体对象
    //query.addJoin("a", "a");
    setParameters(query, args);
    List<T> list = (List<T>) query.list();
    return list;
    } finally {
    if (session != null && session.isOpen()) {
    session.close();
    }
    }
    }