query.iterator()取出的记录会保存到缓存中

解决方案 »

  1.   

    楼上的理解错了,楼主问的不是Query.list()与Query.Iterate()的区别。
    好象Query.list().Iterate返回的是实体对象。
      

  2.   

    list方法在查询时,是一次查询出所有的记录,并实例化,这样有一个缺点,就是数据量很大时内存销好就有点夸张了,
    Iterate这个一次只查询出一部份记录,分多次查询,也就是说SQL语句会被执行多次,hibernate官方好像也推荐使用这个方法样,因为这个虽然被执行了多次,但是好像性能方便影响不是太大.
      

  3.   

    Iterate 是先查出所有主键,然后再一条条查记录, 也就是N+1查询.
    好处是可以利用缓存
      

  4.   

    楼上正解看看,用Iterate 生成的SQL语句就不难理解
      

  5.   

    query.list()是先从二级缓存中查找,
    query.iterate()是先从一级缓存中查找
    所以在优化的过程中这两个是很重要的
      

  6.   

    我刚刚用例子测试了一下,发现情况如下:同样查询UserTquery.list().iterate():
    类似这样的SQL文
    select * from UserT;
    query.iterator()
    类似这样的SQL文
    select no from UserT;也即:
    第一种方案是查询所有列的行记录;
    第二种方案是将所有记录的no逐渐查询出来。大家看我分析的对不?
    有点同意aChinese(一个中国人)的看法。
    大家还有别的意见么,不妨一起讨论一下。