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查询数据方法的更多相关文章

  1. 使用hibernate原生sql查询,结果集全为1的问题解决

    问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Ob ...

  2. Hibernate原生SQL查询多表关联,SQL语句要注意的问题

    Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...

  3. Hibernate(十二):HQL查询(一)

    概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...

  4. Hibernate(十四):HQL查询(三)

    背景 基于上两章节<Hibernate(十二):HQL查询(一)>.<Hibernate(十三):HQL查询(二)>,已经学习了一部分关于HQL的用法: HQL带参数查询 HQ ...

  5. 【Hibernate】hibernate原生sql利用transformers返回多表自定义类型对象

    大致结构: Person(人): id,name,age,bookId Book(书):id,bookName Author(作者):id,authorName,bookId 一个人 只有 一本书,一 ...

  6. Hibernate原生SQL查询

    最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...

  7. hibernate框架学习笔记10:HQL查询详解

    HQL语句中不可以出现与表有关的内容,而是对象的属性 实体类(注意配置文件): package domain; import java.util.HashSet; import java.util.S ...

  8. hibernate框架学习笔记7:HQL查询、Criteria查询简介

    HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...

  9. hibernate原生sql封装,报错信息:could not find setter for rownum_

    今天用hibernate的时候,用了一个原生态sql做了一个分页查询,结果就报错了... 找到解决方法了:http://shmily2038.iteye.com/blog/1704963

随机推荐

  1. 【转载】开发者眼中的Spring与Java EE

    转载自:http://www.infoq.com/cn/news/2015/07/spring-javaee 在Java社区中,Spring与Java EE之争是个永恒的话题.在这场争论中,来自两个阵 ...

  2. hdu5735

    很美妙的一题 官方题解 http://www.cnblogs.com/duoxiao/p/5777632.html 感觉有meet in middle的思想 #include<bits/stdc ...

  3. Django2.x版本路由系统的正则写法以及视图函数的返回问题

    一.关于url.py urlpatterns每个元素的不再用url(),而是path(),最重要的一点是,正则的使用需要你自己手动导入re_path,并且在每个使用正则匹配的的元素用re_path() ...

  4. H264与AAC ES打包成MP4

    注意 设置图像的sps pps MP4AddH264SequenceParameterSet(file,video,sps,sizeof(sps)); MP4AddH264PictureParamet ...

  5. 错误:Eclipse老是出现 updating error reports database

    Eclipse 火星版(Mars)一直出现 updating error reports database. Window--->Preferences--->General---> ...

  6. codeforces 某套题s : surf(贪心 || 动态规划)

    题目: Now that you’ve come to Florida and taken up surfing, you love it! Of course, you’ve realized th ...

  7. POJ 1200 Crazy Search【Hash入门】

    RK法:https://www.cnblogs.com/16crow/p/6879988.html #include<cstdio> #include<string> #inc ...

  8. Flask实战第44天:完成前台注册功能

    注册功能后端逻辑 用户注册要把注册的表单提交上来,因此,我要先对表单进行验证,编辑front.forms from apps.forms import BaseForm from wtforms im ...

  9. 04、Unity 5--全局光照技术

    本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND RENDERING 简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常 ...

  10. Failure INSTALL FAILED DUPLICATE PERMISSION

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha Failure [INSTALL_FAILED_DUPLICATE_PERMISSION ...