hibernate中通过聚合获得结果集

问题描述

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属性数据类型一致。

时间: 2024-07-29 13:09:52

hibernate中通过聚合获得结果集的相关文章

Hibernate中hql如何使用聚合函数sum和group by组合查询!

问题描述 Hibernate中hql如何使用聚合函数sum和group by组合查询! 背景:有一张记录各个班级的成绩表: 目的:需要使用hql查询出各个班级对应的总分: 表对应的类: public class One_Class implements Serializable { private String address; private String subject; private String classes; private int score; //get和set方法省略: //

Hibernate中通过关联映射取得结果集对结果进行排序、分页的方法

问题描述 在Hibernate中通过关联映射, 例如OneToMany等取得一个实体的属性结果集时有没有办法对结果进行排序或者分页. 直接通过HQL或者SQL可以直接利用HQLSQL进行排序分页等操作, 但是如果这类关联映射不支持这些操作那么关联映射的作用感觉也不是很大了. 例如一个User实体有一个Set<Logs>属性, 即一个用户有N多操作日志,OneToMany的, 那么如果通过User.getLogs()取得的结果集将是全部查询··· 解决方案 作为属性,分页应该不行.排序可以: @

在Hibernate中正确实现关联关系中的级联操作(cascading)

关系数据库系统本身就比较复杂,加上Hibernate的O/R映射层,复杂度加重了,很容易出现问题,本人将最近遇到的问题和解决方法做一个总结,整理在下面的一系列文章中 正确理解Hibernate的聚合类型(collection)的使用 在Hibernate中正确实现关联关系中的级联操作(cascading) 在Hibernate框架中编写持久对象类实现外键关联的几点注意事项 本文是第二篇,讲解在one-to-many(一对多)和many-to-one(多对一)关联关系中的cascade特性的声明方

Java Hibernate中使用HQL语句进行数据库查询的要点解析_java

一.实体对象查询 实体对象查询是hql查询的基础,作为一种对象查询语言,在查询操作时和sql不同,查询字符串中的内容要使用类名和类的属性名来代替.这种查询方法相对简单,只要有SQL功底,使用hql是很简单的,但是有一些问题需要注意,就是查询获取数据不是目的,需要考虑的是如何编写出高效的查询语句,这才是讨论的重点. 1.N+1问题 (1)什么是N+1问题在刚听到这个名词时疑惑可能是有的,以前根本就没有听过N+1问题,那么它是指什么呢?N+1指的是一张表中有N条数据,那么在获取这N条数据时会产生N+

Hibernate中各个包的作用简介

下载Hibernate,例如2.0.3稳定版本,解压缩,可以看到一个hibernate2.jar和lib目录下有22个jar包: hibernate2.jar: Hibernate的库,没有什么可说的,必须使用的jar包 cglib-asm.jar: CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库,必须使用的jar包 dom4j.jar: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML

Hibernate中新的TableGenerator 机制

从 initialValue 说起 问题的发现源自对 JPA 中 TableGenerator 的测试.测试的环境有这样几个条件: 为方便查询的测试,Employee 表格在初始化时会导入部分记录,这部分记录的主键在初始脚本中手动写好,比如 1.2.3.4.(参看文章所附示例代码中的import_data.sql 文件). Employee 实体使用 TableGenerator 主键生成器,initialValue 的值设置为 10. 在单元测试中添加新的 Employee 记录. Emplo

Hibernate学习(二)Hibernate中Session之get和load方法的真正区别

最近在学习SHH框架中的Hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入很大.主要是对get方法的说法跟实际运行的结果不一致. 先说一下观点吧: get不支持lazy,load支持lazy: 数据不存在时,get返回null,load则抛出ObjectNotFoundException异常. load方法可以返回实体的代理类实例,而get方法直接读取数据库,所以直接返回

SSRS:报表中分组聚合的展开和收起效果与处理不规则层次结构的技巧

报表中分组聚合的展开和收起效果与处理不规则层次结构的技巧(没有子元素的时候不展开, 删除+符号) 分组聚合的展开和收起效果在SSRS Report中非常常用,并且有时还要处理一些比较特别的情况.比 如分组合并时有的层次结构是不规则的,有的组有两层,遇到这种情况应该如何处理? 注意到下面的这个需求,如果 France 下面没有其它的子层级,就不显示 + 号,如果 United States - Utah/Minnesota 州没有城市的子层次那么它们也不显示 + 号. 这样的需求在 SSRS Re

Hibernate中load和get的区别

Hibernate中Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区别在于: 1.get()方法直接返回实体类,load()方法可以返回实体的代理类实例. 2.hibernate load是采用延迟机制(当lazy属性为true时) 而get不采用延迟机制(get语句马上读库) 3.找不到符合条件的数据 get方法将返回null load将会报出ObjectNotFoundExcepion 4.get支持多态查询,load只有在la