Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,这一级别的缓存由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存,这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
一级缓存和二级缓存的要点
使用二级缓存
这里以EhCache作为二级缓存的插件为例介绍Hibernate二级缓存的配置。
(1)打开二级缓存:
为Hibernate配置二级缓存:
在主配置文件中hibernate.cfg.xml :
Hibernate3.3以上:
Hibernate4.0以上,使用org.hibernate.cache.ehcache.EhCacheRegionFactory
代替net.sf.ehcache.hibernate.EhCacheRegionFactory
(2)配置ehcache.xml
(3)使用二级缓存需要在实体类中加入注解:
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
Load默认使用二级缓存,就是当查一个对象的时候,它先会去二级缓存里面去找,如果找到了就不去数据库中查了。
Iterator默认的也会使用二级缓存,有的话就不去数据库里面查了,不发送select语句了。
List默认的往二级缓存中加数据,假如有一个query,把数据拿出来之后会放到二级缓存,但是执行查询的时候不会到二级缓存中查,会在数据库中查。原因每个query中查询条件不一样。
(4)也可以在需要被缓存的对象中hbm文件中的标签下添加一个子标签:
存在一对多的关系,想要在在获取一方的时候将关联的多方缓存起来,需要在集合属性下添加子标签,这里需要将关联的对象的hbm文件中必须在存在标签下也添加标签,不然Hibernate只会缓存OID。
(5)在hibernate.cfg.xml中配置ehcache.xml文件的位置
(6)和Spring集成
在Spring集成Hibernate配置中,添加如下属性: