既然是Hibernate,那么为什么不直接就用Hibernate的方法去执行查询,返回list(如果是多记录,不用List用什么,只是你在取数的时候用什么方法,有的直接就用listname.get(i),有的先iterator,后面的方法速度稍微快些,正规写法也是这样的),可以就用Hibernate的getHibernateTemplate().find(hql)方法执行查询,没有必要 cateVO = new CategoryVO();
cateVO.setObjectId(rs.getString(0));
cateVO.setCode(rs.getString(1));
cateVO.setCaption(rs.getString(2));
cateVO.setAppId(rs.getString(3));
userCatePriList.add(cateVO); //封装到List中
这样了吧。

解决方案 »

  1.   

    个人作品,欢迎下载Hibernate固强,然用之稍烦.近常思于此而略有心得,故作此小东东以简化之.限予之技而难逃龌龊之举,望各大虾批评指正此套件虽然小,但是可以帮助你在实际项目中提高Hibernate的使用速度
    下载地址为<a href="http://www.cd-accp.net/web/hbdao.rar">http://www.cd-accp.net/web/hbdao.rar</a>此套件主要用于帮助开发人员在Hibernate环境下开发数据访问层
    为了使用此套件,你必须具备JDK1.5(或更高),并且设置你的编译器以支持5.0代码语法
    此套件提供以下功能 1.多Hibernate配置文件的支持
    2.可嵌套虚拟事务模型的支持
    3.事务边界拓展功能的支持
    4.事务隔离级别拓展功能的支持
    5.数据访问类事务处理自动注入的支持愿我的工作能减轻你的负担, 有问题可以反馈至[email protected], 祝使用愉快!
    (接下来的时间里,我将仔细研究.NET的System.Reflect.Emit名字空间以推出NHibernate版本)CSP提示
    自本年2月开始,本人开始利用非常宝贵的下班后的休息时间, 开发一套Java Web框架(CSP);目前取得阶段性成果, 不久的将来便可和大家碰面这套Java Web架构提供如下功能 1.服务端的非常像ASP.NET,提供基于视图控件的属性/事件编程模型
    2.服务端效防ASP.NET的__VIEWSTATE技术,实现页面的有状态化
    3.服务端效防ASP.NET1.1中的模板和数据绑顶功能,以及ASP.NET2.0中的母板功能
    4.服务端前台代码使用严格遵循Schema验证的XML书写,Schema验证结构可扩展.支持解析结果的缓冲和热加载功能
    5.客户端完全使用Ajax技术实现,所有的UI元素由Javascript动态生成
    6.客户端支持__VIEWSTATE隐藏字段信息的拆分和合并,在局部提交的情况下仍然配合全程的服务端工作
    7.客户端支持JavaScript文件的按需延迟下载,以达到下载的最小化如果不出意外.不久后此框架会发行面世,届时望四方朋友捧场如果有问题可以反馈到我的信箱[email protected], 谢谢你对本文挡的阅读
    陈涛,2006-10-17日于北大青鸟(成都名流)
      

  2.   

    首先要说的是如果你查询几个字段的话,使用iterator()是起不到应有的作用的,执行的效果是和list()一样的,而且hibernate的缓存机制也起不到作用,只有返回对象hibernate才能进行缓存,以后查询到该对象时可直接取出使用。
    list()和iterator()的区别在于:list()总是执行你所写的完整的hql语句,产生的sql语句只有一句;而iterator()则不一样,如果你的hql是“select DISTINCT cate from ......”,那么用iterator()产生的sql首先是“select distinct cate.id from ......”,也就是说先把要查询的对象的所有id取出来,当你执行it.next()时,hibernate会将取到的id在session的缓存中去查找,如果有对应的对象,则直接返回该对象,不需要再查询数据库,当缓存中不存在时,则需要根据该id查询数据库,取得该id对应的对象,所以如果返回的n个id都没有缓存对象时,则要再执行n次查询。
    如果你以前执行过查询语句,这些对象已经加载在缓存中了,则使用iterator()可以提高效率,但要注意这里的缓存必须在同一个session的生命周期内,session关闭了缓存也就失效了,不同的session的缓存是不能互访的。