默认是未启用的。
查询缓存默认也是未启用的。
可以缓存类、集合,只有通过id查询时才能使用缓存的数据(get(), load(), iterate())。
查询缓存,需要query.setCacheable(true).list()才会使用查询缓存(1,会先从缓存中找,2,会把查询结果放到缓存中)
如使用update或delete的hql语句直接更新数据库,不会通知一级缓存(Session缓存),但二级缓存中相关的缓存数据就会自动的失效了。
<!-- 开启二级缓存(配置二级缓存的实现) -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<!-- 开启查询缓存 -->
<property name="hibernate.cache.use_query_cache">true</property>
<!-- 配置哪些类或哪些集合需要进行缓存 -->
<class-cache usage="read-write" class="cn.itcast.o_secondcache.Employee"/>
<class-cache usage="read-write" class="cn.itcast.o_secondcache.Department"/>
<collection-cache usage="read-write" collection="cn.itcast.o_secondcache.Department.employees"/>