hibernate原生sql查询映射java bean问题,出现Ljava.lang.object错误

在Hibernate中使用原生SQL查询时,如果查询结果映射到非持久化对象的Java Bean,会出现类型转换错误。解决方法包括:1) 遍历查询结果对象数组并手动装配Bean;2) 使用Transformers.ALIAS_TO_ENTITY_MAP将结果转换为Map对象,或者使用query.setResultTransformer(Transformers.aliasToBean(XXX.class))直接映射到指定的Bean类。注意使用addScalar()方法配合使用。

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

如果bean不是持久化对象,即普通vo对象,单纯通过query.list()强转会出现错误,因为createSQLQuery返回的list中存放的是object[ ],即对象数组


解决方法有两种

1、遍历object[ ]来装配bean对象

 List employeeData = query.list();
返回的employeeData 中的数据是object[],这样取值:
List employeeBean = new ArrayList();
for (int i = 0; i < employeeData.size(); i++) {
Employee employee = new Employee();//把"裸"数据组装到自己的employee类

Object[] object = (Object[]) employeeData.get(i);
employee.setId(object[0].toString());
employee.setName(object[1].toString());
employee.setOrgType(object[2].toString());

employeeBean.add(employee);


另还可以返回一个Map对象,也就是说在在list里包含多个Map,代码如下 
Query query = session.createSQLQuery("select id,name from Tree t where pid in (select id from Tree) ").setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); //返回一个map,KEY:为DB中名称一致(大小写一致)遍历list时就可以

Map map = (Map)list.get[i];

map.get("id");map.get("name");来取值。按你的SQL语句select后的字段名来作为map的Key,但这个key必须与数据库中的字段名一模一样。


2、用query的api,query.setResultTransformer(Transformers.aliasToBean(XXX.class))

     

*注意:addScalar()方法要记得用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值