Hibernate的session.createSQLQuery的几种查询方式

当我们用HQL进行子查询的时候,如select * from Tree where pid in (select id from Tree,此时HIBERANTE就会报错,说什么*号错误之类的。但如果将*改为Tree类里的所有子段时就不会有问题了。就会像平时一样第一行数据返 回一个Object[],然后你再根据Tree类里字段对Object[]数组里的值进行转换。这样一来比较麻烦。今天发现如果我SQL来查有一个方法可 以返回一个对象的。
Configuration config = new Configuration().configure();
SessionFactory sf     = config.buildSessionFactory();
Session session = sf.openSession();
Transaction ts = session.beginTransaction();
Query query = session.createSQLQuery("select * from Tree t where pid in (select id from Tree) ").addEntity(Tree.class);
//返回对象
List  list = query.list();

此时在遍历list时就可以(Tree)list.get[i];将每一行的内容变换为一个对象了。

另还可以返回一个Map对象,也就是说在在list里包含多个Map,代码如下
Query query = session.createSQLQuery("select
id,name from Tree t where pid in (select id from Tree)
").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必须与数据库中的字段名一模一样。

还可以用作函数方面的。如
Query query = session.createSQLQuery("select sum(id) SUMID from Tree t where pid in (select id from Tree)
.addScalar("SUMID",Hibernate.INTEGER)  //转换类型,按DB中的type转
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
//返回一个map,KEY:为DB中名称一致(大小写一致)

直接就map.get("SUMID")可以取值了

时间: 2024-10-11 17:29:25

Hibernate的session.createSQLQuery的几种查询方式的相关文章

Hibernate的Api以及三种查询方式

Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) 默认加载src/hibernate.cfg.xml config.configure("cn/config/hibernate.cfg.xml");   加载指定路径下指定名称的主配置文件 config.buildSessionFactory();   创建session的工厂对象 |--

关于hibernate的session.createSQLQuery(sql)直接调用底层SQL后,返回结果集的问题

数据库中有如下信息name,sex张三.男李四.女通过Hibernate的  createSQLQuery 可以直接调用底层SQL语句如下:List list = (List)getHibernateTemplate().execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException,SQLException { Query query = sessio

hibernate的三种查询方式

hibernate的查询方式常见的主要分为三种: HQL, QBC, 以及使用原生SQL查询(Session的查询) 1)Query的查询:使用HQL语句或SQL语句完成查询 2)Criteria的查询:通过方法和类中属性的关系,来设置查询条件,完成查询. 3)Session的查询:按主键查询查询,方法为get或load 一.HQL查询 ? HQL(Hibernate Query Language)提供了丰富灵活的查询方式,使用HQL进行查询也是Hibernate官方推荐使用的查询方式. ? H

Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象.其它的,包括一些查询函数(count(),sum()等).查询条件的设定等,全都跟SQL语法一样. 示例: Session session = SessionFactory.getCurrentSession(); User user = null; Transaction ts = s

sessionFactory的创建和四种查询方式

1,关于sessionFactory的创建 5.0版本之前,下面这种方式在5.0及之后,可能会出问题,建议修改为5.0之后的方式 // 实例化Configuration Configuration configuration = new Configuration(); // 加载hibernate.cfg.xml文件 configuration.configure("/hibernate.cfg.xml"); // 创建SessionFactory StandardServiceRe

NHibernate的几种查询方式

SQL:普通SQL查询(也就是SQLServer,Oracle,Sybase等数据库的查询语句,建议使用基于TSQL-92) 核心对象:CreateSQLQuery IList list = session.CreateSQLQuery(select * from TabUser).AddEntity(typeof(TabUser)).List(); HQL:Hibernate查询 核心对象:CreateQuery IList list = session.CreateQuery("from T

NHibernate3.2学习笔记-几种查询方式

一.开发环境 数据库:SQLServer2008 编译器:VS2010 .Net版本:.Net Framework 4.0 二.开发过程 1.项目结构 承接上一篇 2.执行sql语句 (1)基本语法 static void ExecuteSql() { string str = "select * from T_Product"; ISQLQuery query = session.CreateSQLQuery(str).AddEntity(typeof(Product)); ILis

cookie 和 session的区别 & 三种传值方式

1.session保存在服务器,客户端不知道其中的信息:cookie保存在客户端,服务器能够知道其中的信息. 2.session中保存的是对象,cookie中保存的是字符串. 3.session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到.而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的. 4.session以cookie为基础,session需要借助cookie才能正常工作,如果客户端完全禁止cookie

Hibernate系列(四):Hibernate两种查询方式:HQL和Criteria

Hibernate主要是提供与数据库之间交互的一个框架,想要用面向对象的语言操作关系型数据库,有如下两种操作方式: HQL语句:面向对象的查询语言,对象名区分大小写.而且不同于SQL的是这里查询的是对象,而不是表,并且支持多态.hql主要通过Query操作 Criteria类:是一种面向对象的查询,主要查询条件. 一.HQL语句: 比如我们要根据name属性查询一条记录(对象): static void query(String name){ Session s = null; try{ s =