二级缓存中的hibernate.cache.use_query_cache的含义是什么?
值为:true和false时的区别?

解决方案 »

  1.   

    感觉设为tue和false,在查询时没区别,都有缓存,都能获得数据
      

  2.   

    你光在hibernate.cfg.xml中设置开启二级缓存是不行的。必须在对象的映射文件配置才行。
    好与不好,这个需要通过数据说话的。比如你个大的数据的query。你可以通过查询时间的差来验证缓存的好处。
      

  3.   

    二级缓存中的hibernate.cache.use_query_cache的含义是这样的,你设置它为true时,表明它的二级缓存就是开启的,false时就是没有开启。具体在实际例中在哪里体现出它的效果,我也不清楚。
      

  4.   

    表示开启查询缓存,命中率是比较低的,在查询时还要设置query.setCache(true);
      

  5.   

    lz 不知道这个看后会不会明白点http://blog.csdn.net/ID19870510/archive/2010/07/15/5738156.aspx
      

  6.   


    再问一个问题,
    当hibernate的<property name="show_sql">true</property>,即控制台显示sql语句打开着时,
    如果查询时是从数据库中获得的就会在控制台显示sql语句,如果是从缓存(包括一级缓存和二级缓存)中获得就不再在控制台显示sql语句了?
    这种说法对吗?
      

  7.   


    之所以 打印出 sql 语句 是因为 hibernate 查询了数据了。(到数据库里查,当然要执行sql了)从缓存中查询出来的数据, 是已经从数据库里查出来的, (没必要再次查询数据库,当然也就不执行sql了)
    我的理解是: 只要是 在console打印除了 sql, 那么 相应的操作必定是对数据库进行了相应的操作 (增删改查)
      

  8.   


    一级缓存是 session 级别的, session 关闭 ,一级缓存就会失效吧。
     数据库关闭, 一级缓存肯定会被清楚至于啥时候清楚 那就得看 jvm 的垃圾收集 了。 我只理解这么多了。 呵呵
      

  9.   

    再 补充点: List ls = query.list();  //  第一次 从数据库查询: 完成后将结果赋给 ls由于缓存机制的存在,第二次查询的时候 ls 中的数据仍然有效的, 所有 直接 操作 ls 而不是操作数据库打印 sql  <==> 操作数据库
    不打印   <==> 无数据库操作