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方法可加可不加都可以实现

相关推荐