求助:关于Hibernate中Query.iterator()方法的使用
最近在学习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();//程序报错
给解决一下吧。
1 楼 zhanggok 2006-09-21 could not get next iterator result。也就是list.size()==0 2 楼 galaxystar 2006-09-21 如果list.size() == 0,转成iterate()应该没问题啊!
异常只会在没调用hasNext()时,调用next()才会报! 3 楼 zhanggok 2006-09-21 哈哈,说错了。建议看文档的第12章 事务和并发 4 楼 linfc 2006-09-21 我又看了一遍事务与并发,但是还是不能找出问题所在,给个详细的介绍,可以吗?谢谢 5 楼 抛出异常的爱 2006-09-21 可能是你的DAO沒有交由HibernateTransactionManager來管理的原因
当然你可以试试看看
http://developer.spikesource.com/spikewatch.logs/fedora-3-i386/2083/hibernate/reports/clover/org/hibernate/impl/IteratorImpl.html 6 楼 zhanggok 2006-09-21 query.iterate(),则是首先通过一条Select SQL 获取所有符合查询条件的记录的 id,再对这个id 集合进行循环操作,通过单独的Select SQL 取出每个id 所对应的记 录,可能是session关闭就不能Iterator 7 楼 linfc 2006-09-22 有什么好的解决方法吗?或者说正确的使用方法。 8 楼 抛出异常的爱 2006-09-22 1不要在关了session之后再用
2如果要用可以先变成java.util.list再用。。 9 楼 linfc 2006-09-22 首先Session没有关闭
其次,如果把Iterator再转成List,它本身的作用还存在吗? 10 楼 抛出异常的爱 2006-09-22 1必是由于session脱管了
2iterator没用了。。。。。
我在我的测试用例中可以使用
你写的例子
我的session 没的脱管 11 楼 linfc 2006-09-24 其实这里的用法没什么错误,是配置文件的问题,jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=school;SelectMethod=cursor,我原来没有使用SelectMethod=cursor,才导致整个问题,真有意思。