在使用hibernate的时候,有时想要把查询结果自动映射为自定义类型或者Map类型,我们一般都会这样操作:

Query query = entityManager.createNativeQuery("sql").unwrap(NativeQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

项目上用的是hibernate5.4,结果发现setResultTransformer方法自5.2版本已过时:

而且org.hibernate.Query接口也过时,官方文档推荐使用org.hibernate.query.Query,但是没有明确说明setResultTransformer方法的替代用法。当然,过时又不是现在不能用了,不追求完美的话还是按原来的方式用就可以,但是我们要知道原因。

百度了许久,答案基本上都是unwrap的时候使用实现类:

这样确实不提示过时了,但是我觉得既然被弃用肯定是有原因的,肯定是有更优的实现方式的,直接去那个问答网站上搜,果然搜到有用的干货。

The Hibernate 5.2 implementation of the DTO projection cannot materialize the DTO projection from the ResultSet without executing a secondary query. However, this is very bad to performance since it can lead to N+1 query issues.

大概意思是原来的实现方式会造成 N+1 query 问题。

This HQL limitation has been discussed, and Hibernate 6.0 new SQM parser might address this issue, so stay tuned!

6.0会解决的,等着瞧好吧。

Hibernate 6 has not been released yet. However, based on this issue ResultTransformer interface was split into the 2 functional interfaces: TupleTransformer and ResultListTransformer.

怎么解决才是要点,

使用示例如下:

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();

测试DTO,组合了Persion和Country:

public class PersonAndCountryDTO{private final Person person;private final String country;public PersonAndCountryDTO(Person person,String country) {this.person = person;this.country = country;}public Person getPerson() {return person;}public String getCountry() {return country;}
}

关于Hibernate ResultTransformer相关推荐

  1. Hibernate ResultTransformer结果集处理接口

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 接口定义 实现类 AliasToBeanConstructorResultTransformer AliasToBeanRe ...

  2. hibernate ResultTransformer (转)

    Using ResultTransformer gengmzh 2010-7-5 ResultTransformer 是 Hibernate 的查询结果转换器,在 HQL . SQL . Criter ...

  3. Using Hibernate ResultTransformer

    Using ResultTransformer gengmzh 2010-7-5 ResultTransformer 是 Hibernate 的查询结果转换器,在 HQL . SQL . Criter ...

  4. Hibernate的ResultTransformer使用

    背景 使用hibernate时,有时需要使用原生sql进行查询,同时希望将查询结果直接转换为java bean,一种方法就是使用hibernate的ResultTransformer的据具体实现类,A ...

  5. java.lang.UnsupportedClassVersionError: org/hibernate/transform/ResultTransformer

    具体问题: Myeclipse2017导入项目运行tomcat报 java.lang.UnsupportedClassVersionError: org/hibernate/transform/Res ...

  6. hibernate 或jpa 中使用 AliasToBeanResultTransformer 自定义类型转换ResultTransformer 下划线转驼峰...

    jpa中使用 sql查询时,返回结果直接转为实体bean的实现, 需要自定义一个ResultTransformer,如下, import java.util.Arrays;import org.apa ...

  7. 在Hibernate中Transformers的所有转换都是需要实现ResultTransformer接口。

    Hibernate中Transformers的所有转换都是需要实现ResultTransformer接口.

  8. 通过query解析hibernate中的resultTransformer

    转载 http://www.iflym.com/index.php/code/resolve-hibernate-result-transformer-by-query.html 任何包装jdbc的框 ...

  9. 用criteria进行关联查询--hibernate 的ResultTransformer

    引用 两个实体 Parent(P) 和 Child(C)之间是1:N的关系,现要求符合指定条件的P及所包 含的C 采用hibernate中的Criteria来实现此功能的代码如下: Java代码 Cr ...

  10. Hibernate三种状态;query查询;ResultTransformer转换为pojo对象;可以将query语句写在xml中;Criteria查询;ProjectionList总和/f分组等函数

    Session操作过程中的pojo对象存在三种状态: 1)  瞬时态:该对象在数据库中没有对应的数据 2)  持久态:数据库中存在该对象对应的数据,同时操作该对象的Session也存在. 3)  游离 ...

最新文章

  1. Android 停止调试程序
  2. slim.flatten——将输入扁平化但保留batch_size,假设第一维是batch
  3. python常用内置函数总结-python 几个常用的内置函数
  4. 基于visual Studio2013解决面试题之0802数字最多元素
  5. C++:undefined reference to vtable 原因与解决办法 [转]
  6. STL源码剖析—stl_config
  7. IOS开发基础之音频工具类封装AVAudioPlayer
  8. 如何修复XML内存“泄漏”
  9. HTML5 Canvas专题
  10. vue 手写签名_签名模仿,把握好三个“度”!
  11. ubuntu man命令彩色高亮显示
  12. 腾讯回应微信读书侵害用户信息;苹果称今年新iPhone将推迟数周发布;Julia 1.6.0 发布| 极客头条...
  13. TASLP | 从判别到生成:基于对比学习的生成式知识抽取方法
  14. Gartner发布2011年SIEM市场分析报告(幻方图)
  15. java 解析cron_Quartz 源码解析(六) —— 解析Cron表达式
  16. 前后端开发接口文档模板(登录、注册、项目发布与需求发布)
  17. 全能电子地图下载器-获取离线地图瓦片的工具
  18. 操作抖音取名项目日赚 500 实战案例分析
  19. 魅族计算机软件不见了,任务栏不见了
  20. 网站关键词密度设置与优化

热门文章

  1. 电子秤PCBA方案的功能及设计
  2. 微信小程序图片自适应屏幕大小真的有效
  3. 合并两个有序数组-c语言
  4. 深度强化学习(深度Q学习
  5. 达梦数据库工程师培训实战教程(主备集群、读写分离、共享集群)
  6. 初中七年级上计算机试题答案,初中信息技术考试试题(含答案).docx
  7. utm坐标和经纬度转换_【技术】经纬度WGS84地理坐标系转换成CGCS2000坐标系步骤...
  8. VMware Workstation 12激活码
  9. HIMSS宣布 Healthcare IT News和MobiHealth News的国际扩张
  10. php环境搭建phpeclipse