hibernate怎么清理缓存数据(hibernate缓存的使用)
hibernate怎么清理缓存数据(hibernate缓存的使用)<!-- 启用二级缓存 --> <property name="cache.use_second_level_cache">true</property> <!-- 二级缓存指定第三方插件 --> <property name="hibernate.cache.provider_class"></property> <!-- 配置哪个类使用二级缓存 --> <class-cache class="com.zhanghe.study.model.User" usage="read-write"/> 哪个类使用二级缓存的配置也可以在.hbm.xml中配置<cache usage="read-write"/>
hibernate提供了两个级别的缓存
- 一级缓存 session级别的缓存,属于事务范围的缓存,由hibernate来管理
- 二级缓存 sessionFactory级别的缓存,属于进程范围内的缓存
二级缓存是属于sessionFactory的外置缓存,默认情况下hibernate是不会启用的,需要第三方的插件
hibernate允许使用的缓存插件
- EHCache 可作为进程范围内的缓存,支持hibernate查询缓存
- OpenSysphony OSCache 可作为进程范围内的缓存,支持hibernate查询缓存
- SwarmCache 可作为集群范围内的缓存,不支持hibernate的查询缓存
- JBossCache 可作为集群范围内的缓存,支持hibernate的查询缓存
在hibernate.cfg.xml中配置启用二级缓存
<!-- 启用二级缓存 -->
<property name="cache.use_second_level_cache">true</property>
<!-- 二级缓存指定第三方插件 -->
<property name="hibernate.cache.provider_class"></property>
<!-- 配置哪个类使用二级缓存 -->
<class-cache class="com.zhanghe.study.model.User" usage="read-write"/>
哪个类使用二级缓存的配置也可以在.hbm.xml中配置
<cache usage="read-write"/>
如果有关联关系的话,还需要再进行设置集合的二级缓存
<!-- collection表示的是全类名加上集合属性名 这时候只会缓存OID-->
<collection-cache collection="com.zhanghe.study.model.many2one.Customer.orderList" usage="read-write"/>
<!-- 在缓存该集合类的实际类型 -->
<class-cache class="com.zhanghe.study.model.many2one.Order" usage="read-write"/>
上述配置对于查询缓存不生效,需要再加上以下配置,并且在查询时使用query.setCacheable(true),查询缓存依赖于二级缓存
<!-- 开启查询缓存 -->
<property name="cache.use_query_cache">true</property>