博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate原生SQL查询数据转换为HQL查询数据方法
阅读量:5051 次
发布时间:2019-06-12

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

HQL形式:(构造方法不支持timestamp类型

public List 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 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 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 queryByMatherBoardId(String matherBoardId) {    Map
map = new HashMap
(); 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
list=(List)q.list(); return list;}/** * 按名称绑定 * @param query * @param values * @return */public Query assignValues(Query query, Map
values) { if (values != null) { Set
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;}

  这样就可以把之前对象数组数组转换为实体类对象数据。(主要是可以记住这个转换方法

转载于:https://www.cnblogs.com/goloving/p/7649248.html

你可能感兴趣的文章
8.Python爬虫实战一之爬取糗事百科段子
查看>>
延迟反应帮助他们避免了一些冲动消费有钱人喜欢讨价还价
查看>>
rsync+inotifywait
查看>>
C#中的线程(一)入门
查看>>
模板渲染引擎
查看>>
sql server2000 多用户操作数据表的问题(转)
查看>>
objective-C学习笔记(六)继承与多态
查看>>
[转]Android Studio常用快捷键
查看>>
JVM参数配置及内存调优
查看>>
网页自适应
查看>>
【转】iOS - SQLite 数据库存储
查看>>
积木分发
查看>>
ASP.NET Core 1.1通过EF Core访问Mysql及linux调试
查看>>
常用第三方开源上传组件总结
查看>>
洗牌算法Fisher-Yates以及C语言随机数的产生
查看>>
lintcode-medium-Find the Missing Number
查看>>
网址url传递参数包含中文时乱码的问题的解决
查看>>
java——多线程并发库
查看>>
[js开源组件开发]js轮播图片支持手机滑动切换
查看>>
JSONObject的toBean 和 fromObject
查看>>