博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate中的addEntity setResultTransformer的比较
阅读量:6258 次
发布时间:2019-06-22

本文共 1250 字,大约阅读时间需要 4 分钟。

如果使用原生sql语句进行query查询时,hibernate是不会自动把结果包装成实体的。

所以要手动调用addEntity(Class class)等一系列方法。
1、session.createSQLQuery(sql).addEntity(Class class);
      注意hibernate3.0.5不支持单个参数的addEntity方法
2、session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(Clazz.class))
      或者setResultTransformer(new AliasToBeanResultTransformer (Clazz.class))
      返回不受Hibernate管理的实体。
上面的查询将会返回Clazz的列表,它将被实例化并且将列表项的值注射入对应的属性或者字段。
http://bbs.xml.org.cn/blog/more.asp?name=lhwork&id=15351
但必须注意,对每一个列都必须addScalar("列名")
既然如此,那么setResultTransformer与addEntity的区别是什么呢?
前者支持查任意的列,后者必须用select * from users的形式或select {a.*},{b.*} from a,b where ....。

查询托管对象

String      sql    = "select c.* from Clazz c "; List
clazzs = (List
) session.createSQLQuery(sql).addEntity(clazz).list(); String sql = "select c.id from Clazz c "; List
clazzs = (List
) session.createSQLQuery(sql).addScalar("id", Hibernate.LONG).addScalar("name", Hibernate.STRING) .setResultTransformer(Transformers.aliasToBean(Clazz.class)).list(); 特别注意: 1. 如果不设置addScalar方法可能会报转型错误的异常. 2.托管查询可以使用投影,只查询指定的列属性

总结:

hibernate实体类用addEntity 

不受Hibernate管理的实体类用setResultTransformer

 

转载于:https://www.cnblogs.com/Junze/p/6007933.html

你可能感兴趣的文章
深入理解 Java 动态代理机制
查看>>
Go基础系列:简单数据类型
查看>>
[UWP]合体姿势不对的HeaderedContentControl
查看>>
使用RSA加密在Python中逆向shell
查看>>
MS UI Automation
查看>>
Android开发指南(41) —— Searchable Configuration
查看>>
现代软件工程 怎么教好课 (读书笔记)
查看>>
磁盘fat32转NTFS
查看>>
关于和技术人员交流的一二三
查看>>
Ubuntu10下MySQL搭建Amoeba系列(文章索引)
查看>>
产生sdp文件供DSS使用
查看>>
《洛克菲勒留给儿子的38封信》 第五封:要有竞争的决心
查看>>
STL vector vs list function comparison:
查看>>
应用服务器和web server 的区别
查看>>
Libevent笔记
查看>>
mycelipse之安装SVN1.6.5(转载)
查看>>
怎样把数据汇到Excel中的心得经验
查看>>
状态键盘完美适应iOS中的键盘高度变化
查看>>
Linux下oracle11g 导入导出操作详细
查看>>
每日英语:When Computer Games May Keep The Brain Nimble
查看>>