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)) 可以将结果以想要的结果存储。