Hibernate原生SQL查询数据转换为HQL查询数据方法
HQL形式:(构造方法不支持timestamp类型)
public List<Device> queryByMatherBoardId(String matherBoardId) {
String hql = "select new Device(d.id,d.diskSize,d.diskSerial) from Device as d where d.matherBoard=:matherBoard";
return this.getSession().createQuery(hql)
.setParameter("matherBoard", matherBoardId).list();
}
使用这种方式,Device构造方法不支持参数为time类型,会报无法匹配合适的构造方法错误。
SQL形式:
public List<Device> queryByMatherBoardId(String matherBoardId) {
String sql = "select d.id,d.diskSize,d.diskSerial,d.registerTime from cems_device as d where d.matherBoardId=:matherBoardId order by registerTime asc";
List<Device> list = getSession().createSQLQuery(hql)
.setParameter("matherBoardId",matherBoardId)
.list();
return list;
}
使用这种方式呢,虽然不会报错,可以正常查询数据,但是获取的数据却是数组对象,达不到我们需要的实体对象的要求。
查询的数据:select d.id,d.diskSize,d.diskSerial,d.registerTime from cems_device as d where d.matherBoardId='D8924D56-414C-ABCC-935A-A9D506926B31' ORDER BY registerTime ASC

想要得到的数据:像下面这样实体类对象

需要像下面这段代码一样转换下:
public List<Device> queryByMatherBoardId(String matherBoardId) {
Map<String,Object> map = new HashMap<String,Object>();
String hql = "select d.id,d.diskSize,d.diskSerial,d.registerTime from cems_device as d where d.matherBoardId=:matherBoardId order by registerTime asc";
map.put("matherBoardId",matherBoardId);
Query q = getSession().createSQLQuery(hql)
.addScalar("id", StandardBasicTypes.STRING)
.addScalar("diskSize", StandardBasicTypes.INTEGER)
.addScalar("diskSerial", StandardBasicTypes.STRING)
.addScalar("registerTime", StandardBasicTypes.TIMESTAMP)
.setResultTransformer(Transformers.aliasToBean(Device.class));
q = assignValues(q, map);
List<Device> list=(List<Device>)q.list();
return list;
}
/**
* 按名称绑定
* @param query
* @param values
* @return
*/
public Query assignValues(Query query, Map<String, ?> values) {
if (values != null) {
Set<String> keySet = values.keySet();
for (String string : keySet) {
Object obj = values.get(string);
if (obj instanceof Collection<?>) {
query.setParameterList(string, (Collection<?>) obj);
} else if (obj instanceof Object[]) {
query.setParameterList(string, (Object[]) obj);
} else {
query.setParameter(string, obj);
}
}
}
return query;
}
这样就可以把之前对象数组数组转换为实体类对象数据。(主要是可以记住这个转换方法)
Hibernate原生SQL查询数据转换为HQL查询数据方法的更多相关文章
- 使用hibernate原生sql查询,结果集全为1的问题解决
问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Ob ...
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题
Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...
- Hibernate(十二):HQL查询(一)
概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...
- Hibernate(十四):HQL查询(三)
背景 基于上两章节<Hibernate(十二):HQL查询(一)>.<Hibernate(十三):HQL查询(二)>,已经学习了一部分关于HQL的用法: HQL带参数查询 HQ ...
- 【Hibernate】hibernate原生sql利用transformers返回多表自定义类型对象
大致结构: Person(人): id,name,age,bookId Book(书):id,bookName Author(作者):id,authorName,bookId 一个人 只有 一本书,一 ...
- Hibernate原生SQL查询
最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...
- hibernate框架学习笔记10:HQL查询详解
HQL语句中不可以出现与表有关的内容,而是对象的属性 实体类(注意配置文件): package domain; import java.util.HashSet; import java.util.S ...
- hibernate框架学习笔记7:HQL查询、Criteria查询简介
HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...
- hibernate原生sql封装,报错信息:could not find setter for rownum_
今天用hibernate的时候,用了一个原生态sql做了一个分页查询,结果就报错了... 找到解决方法了:http://shmily2038.iteye.com/blog/1704963
随机推荐
- C语言实现二叉排序树
程序以'#'结尾的二叉排序树. /*(双重指针 BSTree *T)问:数据结构中 二叉树建立结点为什么用 双重指针?详细解释下双重指针 答:指针的指针.因为树的结点要用指针描述.如果只用指针,作形参 ...
- servlet学习记录:Servlet中的service()方法
Servlet的生存时间是由init,service,destory方法构成,这里分析一下service这个方法 Servlet接口中定义了一个service()方法,而我们一般是使用HttpServ ...
- Mysql+ODBC+OpenLDAP
# 1.安装相关软件yum install wget unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel -yyum install mys ...
- APP线上问题收集信息整理
常话说“软件是不能保证百分百没有bug的”,因此当我们的APP上线之后,市场的使用人员会反馈一些我们测试人员可能在测试时遗漏的问题,包括也不防会有一些需求的反馈,这些问题均由售后人员反馈整理,以一种方 ...
- http中使用json封装数据的性能测试
http中使用json封装数据的性能测试 一个项目使用json封装数据,接口例如: 客户端发送: POST /list.do HTTP/1.1 Host: zoomi.com.cn ...
- centos系统服务管理
系统服务管理工具: chkconfig(所有linux发行版都有),用法很简单,如下: usage: chkconfig --list [name] chkconfig --ad ...
- Spark streaming技术内幕6 : Job动态生成原理与源码解析
原创文章,转载请注明:转载自 周岳飞博客(http://www.cnblogs.com/zhouyf/) Spark streaming 程序的运行过程是将DStream的操作转化成RDD的操作,S ...
- vue-music 关于Search(搜索页面)--上拉加载
建立搜索框组件页面,searchBox,组件接受一个可以自定义传入的placeholder 属性.input v-model 双向绑定数据关联到query 中, 在created中监听 quer ...
- 转:Python安全 - 从SSRF到命令执行惨案
转:https://www.leavesongs.com/PENETRATION/getshell-via-ssrf-and-redis.html Python安全 - 从SSRF到命令执行惨案 PH ...
- 洛谷——P1208 [USACO1.3]混合牛奶 Mixing Milk
P1208 [USACO1.3]混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业 ...