在hibernate执行查询过程中,经常会使用到CreateQuery与CreateSQLQuery,例如下:
Session session=MyhibernateSessionFactory.getCurrentSessionFactory().getCurrentSession();
tx=session.beginTransaction();
hql="from Users where username= ?and password= ?";
//Query query=session.createSQLQuery(hql);
Query query=session.createQuery(hql);
query.setParameter(0, u.getUsername());
query.setParameter(1, u.getPassword());
List list =query.list();
tx.commit();
一不小心把session.createQuery(hql)写成了session.createSQLQuery(hql),导致查询错误, 特记下两者的区别如下:
createQuery 一般使用的是hql语句进行查询,通常以hibernate生成的Bean为对象装入list并返回。
createSQLQuery则一般使用sql语句进行查询,以对象数组的形式进行存储,当然在hibernate中也可以通过 createSQLQuery(sql).addEntity(xxx.class)的方式直接使用。