说明:createQuery用的hql语句进行查询,createSQLQuery用sql语句查询;

前者以hibernate生成的Bean为对象装入list返回;
后者则是以对象数组进行存储;

一、通过createSQLQuery()查询获得,代码如下:

 String sql = "select g.*, b.name as bigTypeName, s.name as smallTypeName from t_goods g, t_bigtype b, t_smalltype s " +
"where s.id = g.smallTypeId and b.id = g.bigTypeId and g.id = :id";
Query query = this.getCurrentSession().createSQLQuery(sql);
query.setResultTransformer(Transformers.aliasToBean(GoodsBeanVo.class));
GoodsBeanVo goodsBeanVo = (GoodsBeanVo)query.uniqueResult();

注意这里要用sql语句查询,主要是

 query.setResultTransformer(Transformers.aliasToBean(GoodsBeanVo.class));

这一句代码,通过ResultTransformer这个类 AliasToBean,通过sql的查询,会返回数组,然后 hibernate根据数据表的映射,自动帮我们来set对应的字段属性,查询的值与设置的vo对应;

setResultTransformer(ResultTransformer transformer)

setResultTransformer的执行者,转换查询结果到实际应用的结果列表

ResultTransformer是个接口。

对应的GoodsBeanVo,这里的第二个构造函数可以不要。

 package com.qc.mall.vo;

 import com.qc.mall.entity.GoodsBean;

 import java.math.BigDecimal;

 /**
* @Author: sijizhen
* @Date: 2018/11/30 0030 下午 2:24
*/
public class GoodsBeanVo extends GoodsBean { private String bigTypeName;
private String smallTypeName; public GoodsBeanVo() {
} /*public GoodsBeanVo(Integer id, String name, BigDecimal price, String proPic, String brand,
Integer sales, Integer views, Integer stock, String contents, Integer bigTypeId,
Integer smallTypeId, Integer state, Object createtime, Object updatetime,
BigDecimal marketReferencePrice, String spare, String remark, String remarkFirst,
String remarkSecond, String bigTypeName, String smallTypeName) {
super(id, name, price, proPic, brand, sales, views, stock, contents, bigTypeId,
smallTypeId, state, createtime, updatetime, marketReferencePrice,
spare, remark, remarkFirst, remarkSecond);
this.bigTypeName = bigTypeName;
this.smallTypeName = smallTypeName;
}*/ public String getBigTypeName() {
return bigTypeName;
} public void setBigTypeName(String bigTypeName) {
this.bigTypeName = bigTypeName;
} public String getSmallTypeName() {
return smallTypeName;
} public void setSmallTypeName(String smallTypeName) {
this.smallTypeName = smallTypeName;
}
}

二、通过createQuery()查询获得,代码如下:

 String hql = "select new com.qc.mall.vo.GoodsBeanVo(g.id, g.name, g.price, g.proPic, g.brand, g.sales, g.views, g.stock, g.contents, g.bigTypeId," +
"g.smallTypeId, g.state, g.createtime, g.updatetime, g.marketReferencePrice," +
"g.spare, g.remark, g.remarkFirst, g.remarkSecond, b.name, s.name) from GoodsBean g, BigTypeBean b, SmallTypeBean s " +
"where s.id = g.smallTypeId and b.id = g.bigTypeId and g.id = :id";
Query query = this.getCurrentSession().createQuery(hql);
query.setParameter("id", id);
GoodsBeanVo goodsBeanVo = (GoodsBeanVo)query.uniqueResult();

用createQuery()查询,需要vo有对应的构造函数,且hql语句中参数的顺序以及参数的类型都要与构造函数中的一致,如果参数类型中有时间类型,需要做相应的转换,否则会报错:

Unable to locate appropriate constructor on class

报此类错误时具体可以参考:http://blog.sina.com.cn/s/blog_4ad7c2540102uzkc.html

对应的GoodsBeanVo代码如下:

 package com.qc.mall.vo;

 import com.qc.mall.entity.GoodsBean;

 import java.math.BigDecimal;

 /**
* @Author: sijizhen
* @Date: 2018/11/30 0030 下午 2:24
*/
public class GoodsBeanVo extends GoodsBean { private String bigTypeName;
private String smallTypeName; public GoodsBeanVo() {
} public GoodsBeanVo(Integer id, String name, BigDecimal price, String proPic, String brand,
Integer sales, Integer views, Integer stock, String contents, Integer bigTypeId,
Integer smallTypeId, Integer state, Object createtime, Object updatetime,
BigDecimal marketReferencePrice, String spare, String remark, String remarkFirst,
String remarkSecond, String bigTypeName, String smallTypeName) {
super(id, name, price, proPic, brand, sales, views, stock, contents, bigTypeId,
smallTypeId, state, createtime, updatetime, marketReferencePrice,
spare, remark, remarkFirst, remarkSecond);
this.bigTypeName = bigTypeName;
this.smallTypeName = smallTypeName;
} public String getBigTypeName() {
return bigTypeName;
} public void setBigTypeName(String bigTypeName) {
this.bigTypeName = bigTypeName;
} public String getSmallTypeName() {
return smallTypeName;
} public void setSmallTypeName(String smallTypeName) {
this.smallTypeName = smallTypeName;
}
}

如有纰漏,还望指正。

参考:https://blog.csdn.net/qq_38286331/article/details/81391948

参考:https://blog.csdn.net/richerg85/article/details/41745819

Hibernate查询返回自定义VO的两种方式的更多相关文章

  1. EntityFramework Core 2.0自定义标量函数两种方式

    前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...

  2. iOS 自定义layer的两种方式

    在iOS中,你能看得见摸得着的东西基本都是UIView,比如一个按钮,一个标签,一个文本输入框,这些都是UIView: 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIVi ...

  3. Asp.net Web API 返回Json对象的两种方式

    这两种方式都是以HttpResponseMessage的形式返回, 方式一:以字符串的形式 var content = new StringContent("{\"FileName ...

  4. Android Activity返回键控制的两种方式

    Android Activity返回键监听的两种方式 1.覆写Activity的OnBackPressed方法 官方解释: Called when the activity has detected ...

  5. 自定义UITabBar的两种方式

    开发中,经常会遇到各种各样的奇葩设计要求,因为apple提供的UITabBar样式单一,只是简单的"图片+文字"样式,高度49又不可以改变.自定义UITabBar成为了唯一的出路. ...

  6. SpringBoot自定义过滤器的两种方式及过滤器执行顺序

    第一种 @WebFilter + @ServletComponentScan 注解 1.首先自定义过滤器 如下自定义过滤器 ReqResFilter 必须实现  javax.servlet.Filte ...

  7. JavaWeb 返回json数据的两种方式

    1.说明 由于一般情况下,由浏览器(前端)发送请求,服务器(后台)响应json数据,所以这里结合js进行说明: A服务器发送请求至B服务器,并接收其返回的json数据,见文末推荐,这里不再赘述! 2. ...

  8. AntDesign VUE:上传组件自定义限制的两种方式(Boolean、Promise)

    AntD上传组件 AntDesign VUE文档 第一种方式 beforeUpload(file) { let isLt = true if (filesSize) { isLt = file.siz ...

  9. 关于Spring Data JPA 多表查询 返回自定义Vo的问题记录

    这两天开了一个新项目,使用SpringBoot+SpringData,  刚做了一个小功能,都是一张表的操作没什么问题,今天设计到了两张表联查,两张表各取了几个字段,组合成了一个vo, 当我用原生sq ...

随机推荐

  1. mysql常用权限命令、乱码及其他问题记录

    用户管理 use mysql; 查看   select host,user,password from user ; 创建 create user  xuhong IDENTIFIED by 'xuh ...

  2. 一.从零认识XAML

    一.XMAL的简单了解 XAML读做zaml,,它是WPF中专门用于设计UI的语言,它简单易懂,结构清晰.是一种声明式语言,当你见到一个标签时,就意味着声明了一个对象:对象之间的层级关系要么是并列,要 ...

  3. 利用Python中SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信 版权声明 本文转自:http://blog.csdn.net/cnmilan/article/details/9664823 ...

  4. java从Swagger Api接口获取数据工具类

  5. LODOP不同打印机出现偏移问题

    方法简单描述:1.精确套打,设置以纸张边缘为基点,可避免不同可打区域不同带了的影响.2.不同客户端打印机位置差异,可通过打印维护调整,结果在客户端本地.或调整打印机初始位置(本人使用的金税盘的开票软件 ...

  6. ☆ [NOI2014] 魔法森林 「LCT动态维护最小生成树」

    题目类型:\(LCT\)动态维护最小生成树 传送门:>Here< 题意:带权无向图,每条边有权值\(a[i],b[i]\).要求一条从\(1\)到\(N\)的路径,使得这条路径上的\(Ma ...

  7. 平衡树splay学习笔记#1

    这一篇博客只讲splay的前一部分的操作(rotate和splay),后面的一段博客咕咕一段时间 后一半的博客地址:[传送门] 前言骚话 为了学lct我也是拼了,看了十几篇博客,学了将近有一周,才A掉 ...

  8. 利用fis3构建前端项目工程

    FIS3是国内百度公司产出的一款前端工程构建工具,FIS3可以解决前端工程中性能优化.资源加载(异步.同步.按需.预加载.依赖管理.合并.内嵌).模块化开发.自动化工具.开发规范.代码部署等问题,首先 ...

  9. python 类的私有变量和私有方法

    #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...

  10. python实现简单的百度云自动下载

    最近女同让我帮助从百度云下载200个文件,给了我连接和提取码,这种重复的工作不适合人做写了一个简单的爬虫 #coding=utf-8 ''' 自动填写提取码下载百度云资源 方法: for 读取文件中的 ...