Hibernate中createQuery与createSQLQuery两者的使用区别

如下是数据库中的客户信息,希望通过客户来源即custSource字段进行统计。

数据库中的客户信息

查询得到的结果如下,希望把结果存到map集合中。

这里写图片描述

public List countSource() {
        Session session=this.getSessionFactory().getCurrentSession();

//      String hql="select count(*),custSource from Customer group by custSource";
//      Query query=session.createQuery(hql);

        String sql="select custSource,count(*) num from t_customer group by custSource";
        SQLQuery query=session.createSQLQuery(sql);

        List list=query.setResultTransformer(Transformers.aliasToBean(HashMap.class)).list();
        return list;
    }

代码中分别通过hql语句和sql语句进行查询,但hql语句查询的结果为空,sql语句可以得到正确结果,我们先来看一下createQuery和createSQLQuery的区别:

前者用的hql语句进行查询,后者可以用sql语句查询
前者以hibernate生成的Bean为对象装入list返回
后者则是以对象数组进行存储
所以我感觉问题的原因在于:hql语句查询的list中,结果是以bean对象存储,不能转化为HashMap结构,所以转化后的结果为空。
对于createSQLQuery,有时候也想以hibernate生成的Bean为对象装入list返回,就不是很方便,但它有这样一个方法可以直接转换对象:
Query query = session.createSQLQuery(sql).addEntity(XXX.class);
XXX 代表以hibernate生成的Bean的对象,也就是数据表映射出的Bean。
另外:query.setResultTransformer(Transformers.aliasToBean(HashMap.class))
可以将结果以想要的结果存储。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值