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

查询得到的结果如下,希望把结果存到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)) 可以将结果以想要的结果存储。

经验分享 程序员 微信小程序 职场和发展