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() {
        @Override
        public Object transformTuple(
            Object[] tuple,
            String[] aliases) {
            return new PersonAndCountryDTO(
                (Person) tuple[0],
                (String) tuple[1]
            );
        }
 
        @Override
        public 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

版权声明:本文为qq_35623773原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35623773/article/details/88318753

智能推荐

Java数据结构和算法之环形队列

实现原理: 代码实现: 总结: 思路并不太难,主要是理解rear和front相等时歧义的消除。如果对为什么每次移动rear和front都 取模以及判断有效值个数的时候的取模等操作不太理解,就画图看下,你就懂了。...

前端打印页面window.print(),会把页面把A标签里面的href属性也给打印出来解决办法

一、问题描述: 大家都知道用window.print()可以实现调用浏览器的打印功能从而打印系统页面 但是直接用window.print()会把A标签里面的href属性也给打印出来了,如下图所示   二、解决办法 解决办法也很简单,只要加上如下css代码就可以啦 三、最后对自己说的  做梦也没想到自己也能有30个粉丝,有的文章还被人收藏了,嘻嘻嘻,超开心啊!  虽然我...

kubernetes 资源清单 initC

编写配置验证initC 编写 init-pod.yaml文件 执行init-pod.yaml文件 查看Pod创建的具体运行状态 这里可能会有无用pod干扰 建议先删除无用pod 查看Pod初始化日志 编写myservice.yaml文件 执行myservice.yaml文件 再次查看pod状态 编写mydb.yaml文件 执行mydb.yaml文件 再次查看Pod状态 学习笔记来源。1 尚硅谷ku...

idea部署远程主机姿势

希望有一天大家都能在借鉴中创新 关键词: 接口服务;自动部署;快速开发 主题: 对于前后端分离的项目往往需要在开发完成一个迭代周期的时候更新部署的服务,常规的操作往往是:clean -> package -> xshell -> sftp -> start。 简单的项目往往每天都需要进行这种操作N次,如果开发支持jenkins环境,可以配置自动脚本进行打包部署,甚至是完成各...

3.4 CNN卷积神经网络基础知识-ReLU**函数(百度架构师手把手带你零基础实践深度学习原版笔记系列)

3.4 CNN卷积神经网络基础知识-ReLU**函数(百度架构师手把手带你零基础实践深度学习原版笔记系列)   ReLU**函数 前面介绍的网络结构中,普遍使用Sigmoid函数做**函数。在神经网络发展的早期,Sigmoid函数用的比较多,而目前用的较多的**函数是ReLU。这是因为Sigmoid函数在反向传播过程中,容易造成梯度的衰减。让我们仔细观察Sigmoid函数的形式...

猜你喜欢

在 AWS上域名备案流程和文件

AWS北京地区是由 光环新网运营,所以 aws 北京地区 ICP 备案 需要提交资料到 光环新网 ,由 光环新网 公司审核后才可以。 备案流程 第一步 请您将注册 AWS 云业务 Account ID 的截图发送至 光环新网 邮箱,具体样式请参见下图。光环新网 需要据此截图进行核对。 1、如果您有一个 Account ID ,请提供对应的 Account ID 2、如果您有多个 Account I...

官方重磅!国产统一操作系统 UOS 20 正式版发布

公众号关注 “GitHubDaily” 设为 “星标”,带你了解圈内新鲜事! 来源:统信软件 官方重磅! 统一操作系统 UOS 正式版面向合作伙伴发布! 统一操作系统是由统信软件开发的一款基于 Linux 内核的操作系统,支持龙芯、飞腾、兆芯、海光、鲲鹏等芯片平台的笔记本、台式机、一体机和工作站,以及服务器。统一桌面操作系统以桌面应用场景为...

【RocketMq】RMQ开源版本Push消费模式为什么批量消费最大拉取数量是32?(MAC)

1 介绍: 由阿里巴巴开源      Apache 基金会顶级项目 gitHub地址 https://github.com/apache/rocketmq  2 本地安转运行MAC 上图步骤分别是: 1 namesrv 服务,启动前注意更改IDE的环境变量 ROCKETMQ_HOME,并将distribute module下的四个配置文件Copy到...

vue学习-part1组件化与值传递

工程结构 组件化 创建了两个vue组件chatcom、userlistcom 在App.vue中将这两个组件导入 值传递 点击右侧用户列表,点击事件会触发父组件App中的方法,并传递索引值。 父组件中的对应方法,会从用户列表中查询相关信息,并更改当前聊天对象chatTargetInfo。 子组件chatcom由于绑定了父组件的chatTargetInfo,所以会同步改变聊天对象姓名。 chatco...

Solr-8.1.1 + IK-analyzer-8.1.0教程

一、Solr简介         Apache Solr是一个功能强大的搜索服务器,它支持REST风格API。Solr是基于Lucene的,Lucene 支持强大的匹配能力,如短语,通配符,连接,分组和更多不同的数据类型。它使用 Apache Zookeeper特别针对高流量进行优化。 二、工具 Postman:发送post请求...