Hibernate 原生SQL查询问题总结
HQL 查询SQL就不多说
Query query = getSession().createQuery(hql); List list = query.list(); getHibernateTemplate().find(hql, value);
原生SQL 查询
users表:id name age class_id score表:id user_id scores String sql = "select * from users user,score s where user.id=s.user_id"; //加入事务处理,否则Session未关闭会出异常 SessionFactory factory = null; Session session = null; List tempList = null; try { factory = getSessionFactory(); session = factory.openSession(); session.beginTransaction(); tempList = session.createSQLQuery(queryString) .addEntity("user", User.class).addEntity("s", Score.class).list(); session.getTransaction().commit(); } catch (Exception e) { e.printStackTrace(); session.getTransaction().rollback(); } finally { session.close(); factory.close(); } return tempList; 读取list内容 Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object[] object = (Object[]) iterator.next(); //学生信息 Users user = (Users) object[0]; //分数信息 Score score= (Score) object[1]; }
问题点
当你的Hibernate的jar包是3.0的时候
1. sqlQuery后面必须加.addEntity()或.addScalar()方法,
.addEntity()返回的类型为实体类,.addScalar("id", Hibernate.INTEGER)返回id的信息,你加几个就返回几个字段的值
list中存储的是Map。
2.当你数据表中的字段有class_id 下划线而实体类中为ClassID时,为有异常提示映射不到列名。
推荐Hibernate使用3.2以上的版本addEntity和addScalar方法可加可不加都可以实现