hibernate 通过sql返回list遍历

在处理查询业务时,作者遇到如何从SQL查询结果中获取特定数据的问题。文章介绍了在Hibernate中,HQL查询返回的list根据查询字段数量会有不同封装类型。当查询多个字段时,list中可能包含Object[],这给遍历带来不便。解决方案是在HQL中使用`select new 类名(属性1,属性2...) from 实体类`并配合实体类的带参构造函数,使list保持实体类对象,简化操作。SQL查询的情况类似。

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

在做一个查询业务时,我需要写入查询语句,返回list
这里写图片描述
我要取出list中的object的两数据如:测试数据、外包客服内容

通过上网查找到hql的情况:

*在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:
1.查询全部字段的情况下,如”from 实体类”,list中封装的对象为实体类本身,各属性都将得到填充。

2.只查询一个字段,默认情况下,list中封装的是Object对象。

3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。

对于后两种情况,用标签遍历时不太方便,因为无法直接转换成实体类的对象。

比较简单的解决方法是:在hql中使用 select new 包名.类名(属性1,属性2……) from 实体类,
同时在实体类中添加带参的构造方法,参数的个数和顺序与(属性1,属性2……) 保持一致,
这样我们得到的list中存放的依然是实体类的对象,所查询到的属性得到了填充,使用起来更为方便。*

其实SQL语句的情况也差不多

***1.只查询一个字段,默认情况下,list中封装的是Object对象。

2.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。*

当第2种情况时,代码如下:

            String sql = "select s.wo_company,wo_next_organ_name from crm_cus_workflow_task t,crm_cus_workflow w,crm_si_workorder s"
                    + " where t.workflow_id = w.workflow_id and t.workflow_task_id ='"
                    + workflowTaskId + "' and s.wo_workflow_id=w.workflow_id";
            // 按工单任务id查询企业名称、营业机构的值
            List list = queryBySql(sql);
            String company = "";
            String organ = "";
            for (int i = 0; i < list.size(); i++) {
                **Object[] object = (Object[]) list.get(i);**
                if (object[0] != null) {
                    company = object[0].toString();
                }
                if (object[1] != null) {
                    organ = object[1].toString();
                }

            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值