此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【leopard353】截止到2008-07-01 17:20:17的历史汇总数据(不包括此帖):
发帖数:4                  发帖分:80                 
结贴数:4                  结贴分:80                 
未结数:0                  未结分:0                  
结贴率:100.00%            结分率:100.00%            
敬礼!

解决方案 »

  1.   

    这就是二级缓存中的查询缓存,其实是这样的如果设置了查询缓存,第一次执行查询list的时候,直接操作数据库返回结果集同时填充缓存第二次执行list的时候,hibernate就不会去数据库里面去查询,而是直接找的缓存,所以就不执行数据库的操作当你把setCacheable(true)注释掉的时候,list函数的查询机制发生改变,变为每次查询都是直接查询数据库,然后填充缓存
    也就是说:如果setCacheable(true)设置为true,那么list第一次查询的是数据库,然后填充缓存,
              以后的查询就去直接去缓存里寻找           如果setCacheable(false)的话,list函数每次都是区数据库查询,然后填充缓存
     
      

  2.   

    这就是传说中的hibernate一级缓存!!!如果你把每次得到的session都关闭或者不关闭用session.evict(obj)应该也能查出来更新过的数据
      

  3.   


    不是一级缓存,是二级查询缓存,二级查询缓存是先到查询缓存里去找该条查询对应的value(一堆id),然后再根据value一条一条的去二级缓存的class级缓存去找只要不设置查询缓存,list每次都是去数据库直接加载
      

  4.   

    我试过每次都把session关闭,但还是不行。
      

  5.   


    二级缓存是基于应用的,也就是基于sessionfactory的,所以你关闭session没用,不过可以强制清空缓存evict这里清空的是class级缓存,会导致n+1的问题,建议楼主找找相关资料好好看看