首页 > 代码库 > hibernate二级缓存

hibernate二级缓存

参考文章:http://blog.csdn.net/wtz20110803/article/details/7297579

缓存类型:类,集合 和 查询的缓存:

1.一级缓存的主要作用不是用来提高性能,而是用来管理对象

2.其中对象变化了可以更新到数据库中

3.一次会话级别的成为一级缓存,应用程序级别(sessionfactory级别)的成为二级缓存

4.二级缓存默认是不开启的

5.用集合缓存的话类的缓存也必须要打开,因为集合缓存中存的是每一项的ID,如果没有类的

  缓存,则下次查询的时候由于二级缓存中没有此类,他会根据ID去数据库中查询,效率下降

  因此将类缓存,才能到二级缓存区中根据ID查找出来

6.不论一级还是二级缓存,都是在使用OID的方式获取对象时才有效,例如get或load方法

7.HQL查询中,对于query.list()默认不会使用缓存,即使写成where id=1也不会,但会放入缓存之中

8.在使用HQL查询时,如果采用iterate()方法查询,则会使用缓存

  因为这个方法是先查询所有符合条件的ID集合,再一个一个的按照ID查找数据,就能够使用缓存了

  但是其有N+1次查询的问题,提升性能有限

9.查询缓存(此时将条件作为key缓存存储起来,若条件改变则缓存无效):

  使用查询缓存session.createQuery("XXX")  .setCacheable(true)  .list();

  主映射文件中的配置:

  <property name="cache_use_query_cache">true</property>

  使用时query查询时,setCacheable设置TRUE;