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