在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, 搞定!
分享到:
相关推荐
hibernate 的createSQLQuery的几种用法总结
关于hibernate 的createQuery和createSqlQuery 的区别
8.5.5 遍历对象图 8.6 小结 8.7 思考题 第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1...
8.5.5 遍历对象图 8.6 小结 8.7 思考题 第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1...
8.5.5 遍历对象图 8.6 小结 8.7 思考题 第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1...
8.5.5 遍历对象图 8.6 小结 8.7 思考题 第9章 通过Hibernate操纵对象(下) 9.1 与触发器协同工作 9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1...
使用hibernate的query调用oracle的存储过程/function,包含例子,源码以及数据库文件
If Hiberate is used, with the help of query builder (createSQLQuery) in org.hibernate.Session, one can mention the placeholder parameter name in the SQL and set the values based on the parameter name....