Hibernate本地SQL结果集转换为自定义POJO对象

本文介绍了在Hibernate中如何将本地SQL查询的结果转换为自定义的POJO对象。通过设置query.setResultTransformer()并利用Transformers.aliasToBean()方法,可以将结果集映射到指定对象的属性上,但要求字段对应。在Hibernate 4.3.5.Final版本下,可以使用ColumnToBean转换器,但在更高版本中,部分类和包名有所变更,需做相应调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate如果用于单表的增删改查,其方便性不言而喻,但很多时候我们需要进行关联查询。这时候Hibernate可能不是太方便了。好在Hibernate提供了本地SQL,允许我们手写SQL语句。

Hibernate之所以不用手写SQL,是因为Hibernate的实体类对象和数据库字段之间有映射关系。而我们自定义的对象和数据库之间没有明显的映射关系。比如:

 SQL语句中查询出来的字段一般都是下划线形式的,而我们java对象中一般是驼峰方式。如果用实体类就没问题,但我们这里需要用到自定义的普通POJO对象,这里存在转化问题。

Hibernate提供了一个结果集转换的方法。

query.setResultTransformer(ResultTransformer transformer)。

Hibernate提供了该方法的参数的几种取值

  1. Transformers.ALIAS_TO_ENTITY_MAP //把输出结果转换成map  
  2. Transformers.TO_LIST //把结果按顺序排进List  
  3. Transformers.aliasToBean(target) //把结果通过setter方法注入到指定的对象属性中

这里第三种比较接近对象转换了。但第三种只是把结果集用自定义对象去接收了,这里还是要求自定义对象的字段要和结果集的字段要能对应上了。所以我们可以考虑参照相关代码,实现数据库字段到java对象之间的转换。

使用的时候也很方便setResultTransformer(new ColumnToBean(targetObject.getClass())) 即可

详细代码如下(注意:以下代码在Hibernate4.3.5.Final版本下测试通过,由于Hibernate版本升级改动太大,现已知在5.0版本下部分类名称以及包名都发生了变动,需要做些改动才行,具体可以参考我写的另一篇文章,链接地址https://blog.youkuaiyun.com/lichuangcsdn/article/details/88063953):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.lang.reflect.Field;
import java.sql.Clob;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.property.ChainedPropertyAccessor;
import org.hibernate.property.PropertyAccessor;
import org.hibernate.property.PropertyAccessorFactory;
import org.hibernate.property.Setter;
import org.hiber
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值