论坛首页 Java企业应用论坛

求助:关于Hibernate中Query.iterator()方法的使用

浏览 9428 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-09-21  
最近在学习Hibernate,碰到一个很奇怪的问题,研究了半天也没搞清楚怎么回事。
我在使用Query查询的时候,如果使用Query.list()返回一个List类型,程序没什么错误
,但是使用Query.iterator()返回一个Iterator类型,程序报错:could not get next iterator result。具体的代码是:
Query queryObject = getSession().createQuery("from Teacher");
queryObject.setCacheable(true);
//List list = queryObject.list();//返回正确
return queryObject.iterate();//程序报错
给解决一下吧。
   发表时间:2006-09-21  
could not get next iterator result。也就是list.size()==0
0 请登录后投票
   发表时间:2006-09-21  
如果list.size() == 0,转成iterate()应该没问题啊!
异常只会在没调用hasNext()时,调用next()才会报!
0 请登录后投票
   发表时间:2006-09-21  
哈哈,说错了。建议看文档的第12章 事务和并发
0 请登录后投票
   发表时间:2006-09-21  
我又看了一遍事务与并发,但是还是不能找出问题所在,给个详细的介绍,可以吗?谢谢
0 请登录后投票
   发表时间:2006-09-21  
可能是你的DAO沒有交由HibernateTransactionManager來管理的原因

当然你可以试试看看
http://developer.spikesource.com/spikewatch.logs/fedora-3-i386/2083/hibernate/reports/clover/org/hibernate/impl/IteratorImpl.html
0 请登录后投票
   发表时间:2006-09-21  
query.iterate(),则是首先通过一条Select SQL 获取所有符合查询条件的记录的 id,再对这个id 集合进行循环操作,通过单独的Select SQL 取出每个id 所对应的记 录,可能是session关闭就不能Iterator
0 请登录后投票
   发表时间:2006-09-22  
有什么好的解决方法吗?或者说正确的使用方法。
0 请登录后投票
   发表时间:2006-09-22  
1不要在关了session之后再用
2如果要用可以先变成java.util.list再用。。
0 请登录后投票
   发表时间:2006-09-22  
首先Session没有关闭
其次,如果把Iterator再转成List,它本身的作用还存在吗?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics