如:
T: String name
D: Double sum1,sum2HQL: select t.name,d.sum1,d.sum2 from T t, D d where t.id=d.id
这样返回的是对象数组,但因为有String和Double两种类型,不像查询的是对象结果,在页面上get出来就可以
像这种返回对象数组的数据该怎么处理呢

解决方案 »

  1.   

    嗯,首先,我们声明一个Query对象:
    如下:
    public void selectHql(){
    Session session = db.getSession();
    String hql="select t.name,d.sum1,d.sum2 from T t, D d where t.id=d.id ";
    Query query = session.createQuery(hql);
    List list = query.list();
    db.closeSession();
    this.PrintStudentsList(list);
    }
    定义了一个方法:用于将list中读取信息
    private void PrintStudentsList(List list){
    Iterator it = list.iterator();
    while(it.hasNext()){
    Students item = (Students) it.next();
    System.out.println(item.getName()+"\t");
    }
    }参考参考吧:
      

  2.   

    回1楼,你这方法是对一个实体对象操作的吧
    回2楼,这是肯定的啊,关键的是t.name,d.sum1,d.sum2 怎么封装这三个属性呢
      

  3.   

    利用JAVA反射机制~个人认为你可以先在你的POJO类T中加上你D的SUM2这个属性!然后就可以引用JAVA反射机制对T类操作!HIBERNATE也是用这样的机制封装对象!个人认为这样的方法系通用!不过这种方法比较烦!
    第二种方法:
    先在你的POJO类T中也时加上D的SUM2属性,在T类中添加一个构造函数 pubilc T(String name,double sum1,double sum2);一定要有这个构造函数。
    好似HQL语句系这样写: select new T(t.name,t.sum1,d.sum2) from T t,D d where t.id=d.id;
    调用query.list();这样HIBERNATE就可以帮我们自动的封装对象。
    其实个人认为Hibernate真的在海量数据面前,真TMD效率好低~唉~~~希望Hibernate能有改进。
      

  4.   

    po和vo的概念po既是数据库返回数据包装的对象,是以每条记录为单位的vo就是前台要显示的对象,就是包装了po查询的信息的对象,也是以条目为单位的所以,在po与vo之间就要有包装逻辑,也就是说,从数据库中查出来po的list(最好使用泛型,比如List<po>,po是包装类型),通过逻辑挨条set到vo中,包装volist,通过你使用的技术,返回给前台迭代