在Hibernate中,利用hql来获取对象list,并且进行遍历是非常简单的:
程序代码
String hql="from NewClasses order by Id desc";
List li=DbUtil.getSession().createQuery(hql).list();
Iterator<NewClasses> it=li.iterator();
while(it.hasNext())
{
NewClasses newclasses=it.next();
System.out.println(newclasses.getClassTitle());
System.out.println(newclasses.getAddDate());
}
但 如果用createSQLQuery()获取list 而采用上面的方法遍历时就会出现下面的错误:
Exception in thread "main" java.lang.ClassCastException:
[Ljava.lang.Object;
at com.zb.test.TestDbUtil.main(TestDbUtil.java:30)
程序代码
List li=DbUtil.executeQuery("select * from NewClasses order by Id desc");
Iterator<NewClasses> it=li.iterator();
while(it.hasNext())
{
NewClasses newclasses=it.next();
System.out.println(newclasses.getClassTitle());
System.out.println(newclasses.getAddDate());
}
原 因是我们
没有将表与相关的实体类进行关联,我们 修改工具类的方法:
程序代码
public static List executeQuery(String sql,Class cls){
Session s=HibernateSessionFactory.getSession();
Query q = s.createSQLQuery(sql).addEntity(cls);
return q.list();
}
调 用语句改为:
List li=DbUtil.executeQuery("select * from NewClasses order by Id desc",NewClasses.class);
Ok, 搞定!