问题描述
hibernate中通过聚合获得结果集怎么弄,得到的结果集怎么存储成自己想要的pojo,怎么遍历,求解 问题补充:WAMING5 写道
解决方案
如果用的SQL,例如Query query = session.createSQLQuery("select id,name from Tree t ).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一个map,KEY:为DB中名称一致(大小写一致)遍历list时就可以 Map map = (Map)list.get[i]; map.get("id");map.get("name");来取值。按你的SQL语句select后的字段名来作为map的Key,但这个key必须与数据库中的字段名一模一样。 如果用HQLQuery query = session.createQuery("select new map(t1.c1,t2.c3) from table1 t1");List<Map> lists=query .list();
解决方案二:
WAMING5 写道引用很是感谢。我也上网查了很久得到了解决方案。方法基本上一样,如下(sno:学号,grade:年级,查询不同年级的人数): Java代码 1.List list = session.createSQLQuery(select grade ,count(sno) cout from student group by grade).list(); 2. 3.for (Iterator iterator = list.iterator(); iterator.hasNext();) { 4. Object[] object = (Object[]) iterator.next(); 5. System.out.println("年级:"+object[1]+" 人数" + object[2]); 6. } 对于结果你不是要放进自己的bean中吗?这样查询出来的只是个Object数组那下面就是解决方案呀:引用Query query = session.createSQLQuery("select id,name from Tree t ).setResultTransformer(Transformers.aliasToBean(Bean.class)); 你需要转换成的bean,并且这些属性id name 所查询的属性都必须在Bean里有,这个Bean可以没有映射,但是必须存在。 List list=query.list(); 当然这个List里面都是Bean的实例,和正常一样取值就好。 当然你也可以 query.addScalar("id", StandardBasicTypes.LONG)为每一个查询的属性指定数据类型,数据类型需要和Bean属性数据类型一致。
解决方案三:
引用很是感谢。我也上网查了很久得到了解决方案。方法基本上一样,如下(sno:学号,grade:年级,查询不同年级的人数):Java代码 1.List list = session.createSQLQuery(select grade ,count(sno) cout from student group by grade).list(); 2. 3.for (Iterator iterator = list.iterator(); iterator.hasNext();) { 4. Object[] object = (Object[]) iterator.next(); 5. System.out.println("年级:"+object[1]+" 人数" + object[2]); 6. } 对于结果你不是要放进自己的bean中吗?这样查询出来的只是个Object数组
解决方案四:
看错了,弄成Map了。Query query = session.createSQLQuery("select id,name from Tree t ).setResultTransformer(Transformers.aliasToBean(Bean.class)); 你需要转换成的bean,并且这些属性id name 所查询的属性都必须在Bean里有,这个Bean可以没有映射,但是必须存在。List list=query.list();当然这个List里面都是Bean的实例,和正常一样取值就好。当然你也可以query.addScalar("id", StandardBasicTypes.LONG)为每一个查询的属性指定数据类型,数据类型需要和Bean属性数据类型一致。