ResultTransformer deprecated 替代方案及HQL无法使用子查询解决
hibernate 由于从5.2升级成5.4 再用了ResultTransformer封装临时对象时sonar 报错,显示ResultTransformer 过时
官方在5.2版本中将此方法标记为过时,但没有提供替代方案,需要升级到6.0时才提供提到方法
虽然ResultTransformer方法过时,但接口并没有,我们可以通过内部类的方式实现自定义封装。
List<PersonAndCountryDTO> personAndAddressDTOs = entityManager
.createQuery("select p, c.name " +"from Person p " +"join Country c on p.locale = c.locale " +"order by p.id")
.unwrap( org.hibernate.query.Query.class )
.setResultTransformer(new ResultTransformer() {@Overridepublic Object transformTuple(Object[] tuple,String[] aliases) {return new PersonAndCountryDTO((Person) tuple[0],(String) tuple[1]);}@Overridepublic List transformList(List collection) {return collection;}}
)
.getResultList();
不实现该接口我们可以通过HQL 的方式实现封装:
但由于hql 总不支持子查询 生成的虚表必须有对应的实体类跟映射文件才可,不然会报如下异常:
org.hibernate.hql.internal.ast.QuerySyntaxException:unexpected token: ( near line 1, column 136 [SELECT new com.gravity.dao.job.JobStatusAlertItem(j.id, j.clientId, c.lastHiredTime) FROM com.gravity.model.job.JobPO AS j INNER JOIN ( SELECT ce.jobId, COUNT(ce.candidateId) AS hiredNum, MAX(ce.changedTime)*1000 AS lastHiredTime FROM com.gravity.model.analytic.CandidateHireOrBackBurnerEventsPO AS ce WHERE ce.status=60 AND ce.candidateId NOT IN ((SELECT cd.id FROM com.gravity.model.candidate.CandidateDeletedPO AS cd)) GROUP BY ce.jobId
) AS c ON c.jobId = j.id WHERE j.status = 2 AND j.noOfOpenings <= c.hiredNum AND j.confidential IS FALSE AND j.candidatePool IS FALSE]
最后 只能使用 list<Object[]> 接收收据。
参考: https://vladmihalcea.com/why-you-should-use-the-hibernate-resulttransformer-to-customize-result-set-mappings/
HQL中使用子查询解决方法: https://blog.csdn.net/fableking/article/details/3167081
ResultTransformer deprecated 替代方案及HQL无法使用子查询解决相关推荐
- Mysql 知行必会 “子查询”
Mysql 知行必会 "子查询" 每博一文案 后半生看透了人心,也看透了这世间所有的得失,不值得的人,不再 托付真心,不值得的感情,不会苦苦挽留,这世上有太多的人, 人前口服蜜饯, ...
- oracle中使用子查询为何取到大于自然数1 rownum 浅度解析
Oracle 没有提供TOP N 语句,若希望按特定条件查询前N 条记录,可以使用伪列ROWNUM. ROWNUM 是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列(注意:先要 有结果集). ...
- mysql的结构化编程_月光软件站 - 编程文档 - 其他语言 - 结构化子查询:在mysql4.1中的应用...
By Trudy Pelzer 翻译:guipei 随着mysql 4.1版的发布,现在有两种方法可以使用一个单独的查询从多个数据表中取得数据:使用连接(join)或者使用子查询(subquery). ...
- MySQL 表关系及多表操作(联合查询、连接查询、子查询)
文章目录 表关系 一对一关系 一对多关系 多对多关系 总结 MySQL多表操作 联合查询 联合查询排序 连接查询 交叉连接 内连接 外连接 自然连接 using关键字 子查询 表关系 表关系:一个表代 ...
- Mybatis一对多分页问题,采用子查询
前言 最近在做一个需求,简单来讲就是有两个表,一个公司表,一个公司类型表,一个公司有多个类型,这是一对多的关系,需要连接查询处理.但在用了公司框架分页的时候,会把整个连接查询结果作为总条数返回,导致分 ...
- hibernate HQL 使用from (select ……)子查询的方法
今天徒弟用到了一句复杂的查询语句....结果执行报错,但是在SQL中执行没有问题,于是来求助我了... 语句的HQL/SQL格式如下: select count(1) ,cxltype,sum(dzs ...
- mysql子查询为什么不走索引_解决MySQL中IN子查询会导致无法使用索引问题
测试表如下: CREATE TABLE`test_table` ( `id`int(11) NOT NULLAUTO_INCREMENT, `pay_id`int(11) DEFAULT NULL, ...
- Oracle子查询无法使用order by如何办?
from 子句后面的内联视图是可以使用order by子句进行排序的. 然而,其它视图或子查询是不能用order by进行排序的 如果你要用选择前几条的话,需要在套一层变成from后面的内联视图. 比 ...
- mysql in 子查询无法使用索引全表扫描 慎用in
背景 最近慢sql 性能优化 发现一个调用频率高的sql 使用 in 子查询,导致外层全表扫描的问题? 为什么会产生这样的问题?特别强调在优化的使用发现 使用in 和优化后的效果差距 300倍,可见全 ...
最新文章
- ES6关于Promise的用法详解
- Mac+docker+flask
- 2台xenserver组成的资源池开启HA存在的问题
- 【直播课】图像分类竞赛技巧与多标签分类实战
- java如果属性为空返回其他_后台返回前台数据(实体类)如果存在为空或‘’的属性,如何过滤掉...
- View,SurfaceView,SurfaceHolder
- hadoop之blockreport
- 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
- C++ STL学习笔记(5) Vector容器, array容器,deque容器
- 高德地图通过经纬度获取地区城市
- 【题解】洛谷P1661扩散(同LibreOJ10015) 曼哈顿距离最小生成树
- 三大运营商流量卡的现状:不兼容,死卡,三网物联卡你选对了吗?
- 知识图谱在应用过程中,主要面临哪些困难?
- 如何用计算机控制ipad,躺在床上玩电脑,使用ipone ipad远程控制LAN计算机-ipad如何连接到计算机...
- 基于SNMP的网络拓扑结构自动发现研究
- MT6853(联发科技天玑 720 )核心板支持5G北斗
- 飞思卡尔XS128系列(三) PIT
- Archetype是什么?
- 起先于心血来潮的linux学习...
- 一个两自由度DIY云台+OpenMV就可以实现简单云台跟踪了,以前的板球控制系统感觉也可以看作一种变相的云台跟踪啊!