本帖最后由 limaoyuan 于 2010-10-24 14:28:58 编辑

解决方案 »

  1.   

    哥给你科普科普吧,如果你用了hibernate二级缓存那么不管你调用list()iterate()load()get()方法他都会将结果集放到二级缓存里面,二级缓存是什么呢,其实我们可以把他简单的看成一个map,key是ID,value是对象,当你执行这么一条HQL语句的时候from User where sex = '男',如果你调用iterate,那么他首先会去数据库查询满足这个条件的所有ID,翻译成SQL就相当于select id from user where sex='男',返回一个id集合,然后在通过ID在map上面找相应的对象,如果用id查询不到该对象的话那么他就会去数据库查询,如果查到了,那么他就直接返回.但是用list他不会去查询缓存,他直接查询数据库.所以你那个问题是你自己的问题
      

  2.   


    我随便回答几句(懒得回去查程序代码了) 关于问题1的.你问的其实应该是有关idle timer 的问题, Ehcache缺省cache的 element的idle time好像是300秒,我在项目中设的是120秒.BTW,建议LZ你多读读配配ehcache.xml文件, 应用 二级缓存的经验:
    1.傻用
    就是在hibernate里打开. (其实还可以在web.xml中打开对web servlet action的ehcache二级缓存)
    2.活用
    开始学着配ehcache.xml里的配置
    3.深用
    真正的二级缓存开发,自己定义 Ehcache cache,自己定义Ehcache bean,自己建立调度策略,全手动控制.