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无法使用子查询解决相关推荐

  1. Mysql 知行必会 “子查询”

    Mysql 知行必会 "子查询" 每博一文案 后半生看透了人心,也看透了这世间所有的得失,不值得的人,不再 托付真心,不值得的感情,不会苦苦挽留,这世上有太多的人, 人前口服蜜饯, ...

  2. oracle中使用子查询为何取到大于自然数1 rownum 浅度解析

    Oracle 没有提供TOP N 语句,若希望按特定条件查询前N 条记录,可以使用伪列ROWNUM. ROWNUM 是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列(注意:先要 有结果集). ...

  3. mysql的结构化编程_月光软件站 - 编程文档 - 其他语言 - 结构化子查询:在mysql4.1中的应用...

    By Trudy Pelzer 翻译:guipei 随着mysql 4.1版的发布,现在有两种方法可以使用一个单独的查询从多个数据表中取得数据:使用连接(join)或者使用子查询(subquery). ...

  4. MySQL 表关系及多表操作(联合查询、连接查询、子查询)

    文章目录 表关系 一对一关系 一对多关系 多对多关系 总结 MySQL多表操作 联合查询 联合查询排序 连接查询 交叉连接 内连接 外连接 自然连接 using关键字 子查询 表关系 表关系:一个表代 ...

  5. Mybatis一对多分页问题,采用子查询

    前言 最近在做一个需求,简单来讲就是有两个表,一个公司表,一个公司类型表,一个公司有多个类型,这是一对多的关系,需要连接查询处理.但在用了公司框架分页的时候,会把整个连接查询结果作为总条数返回,导致分 ...

  6. hibernate HQL 使用from (select ……)子查询的方法

    今天徒弟用到了一句复杂的查询语句....结果执行报错,但是在SQL中执行没有问题,于是来求助我了... 语句的HQL/SQL格式如下: select count(1) ,cxltype,sum(dzs ...

  7. mysql子查询为什么不走索引_解决MySQL中IN子查询会导致无法使用索引问题

    测试表如下: CREATE TABLE`test_table` ( `id`int(11) NOT NULLAUTO_INCREMENT, `pay_id`int(11) DEFAULT NULL, ...

  8. Oracle子查询无法使用order by如何办?

    from 子句后面的内联视图是可以使用order by子句进行排序的. 然而,其它视图或子查询是不能用order by进行排序的 如果你要用选择前几条的话,需要在套一层变成from后面的内联视图. 比 ...

  9. mysql in 子查询无法使用索引全表扫描 慎用in

    背景 最近慢sql 性能优化 发现一个调用频率高的sql 使用 in 子查询,导致外层全表扫描的问题? 为什么会产生这样的问题?特别强调在优化的使用发现 使用in 和优化后的效果差距 300倍,可见全 ...

最新文章

  1. ES6关于Promise的用法详解
  2. Mac+docker+flask
  3. 2台xenserver组成的资源池开启HA存在的问题
  4. 【直播课】图像分类竞赛技巧与多标签分类实战
  5. java如果属性为空返回其他_后台返回前台数据(实体类)如果存在为空或‘’的属性,如何过滤掉...
  6. View,SurfaceView,SurfaceHolder
  7. hadoop之blockreport
  8. 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
  9. C++ STL学习笔记(5) Vector容器, array容器,deque容器
  10. 高德地图通过经纬度获取地区城市
  11. 【题解】洛谷P1661扩散(同LibreOJ10015) 曼哈顿距离最小生成树
  12. 三大运营商流量卡的现状:不兼容,死卡,三网物联卡你选对了吗?
  13. 知识图谱在应用过程中,主要面临哪些困难?
  14. 如何用计算机控制ipad,躺在床上玩电脑,使用ipone ipad远程控制LAN计算机-ipad如何连接到计算机...
  15. 基于SNMP的网络拓扑结构自动发现研究
  16. MT6853(联发科技天玑 720 )核心板支持5G北斗
  17. 飞思卡尔XS128系列(三) PIT
  18. Archetype是什么?
  19. 起先于心血来潮的linux学习...
  20. 一个两自由度DIY云台+OpenMV就可以实现简单云台跟踪了,以前的板球控制系统感觉也可以看作一种变相的云台跟踪啊!

热门文章

  1. 防沉迷系统的设计与实现
  2. Spring Data JPA 分页
  3. svn各种箭头的含义
  4. 关于Unity3D的一些笔试题(4)
  5. [20110209]Cocos2dSimpleGame入门系列《如何用cocos2d-x来开发简单的Uphone游戏》学习小记
  6. 专业测量串口收发数据时间软件
  7. FTP架设及本地分享局域保姆级教程
  8. 大学生和职场人员必备--优秀网站集结地
  9. 约课系统php,约课宝瑜伽馆会员约课系统,实现会员自助预约课!
  10. 宏基微型计算机c650使用方法,1L小机箱能干嘛?让宏碁Veriton C650告诉你答案