今天仔仔细细看了下Hibernate缓存Cache并做了例子实战了把google下网上教程、文章很多
自己小结下:
Hibernate缓存Cache分为:
级缓存Cache:在Session级别在Session关闭时候级缓存Cache就失效了
2级缓存Cache:在SessionFactory级别它可以使用区别缓存Cache实现如EhCache、JBossCache、OsCache等
缓存Cache注释写法如下加在Entityjava类上:
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
缓存Cache方式有 4种分别为:
CacheConcurrencyStrategy.NONE
CacheConcurrencyStrategy.READ_ONLY只读模式在此模式下如果对数据进行更新操作会有异常;
CacheConcurrencyStrategy.READ_WRITE读写模式在更新缓存Cache时候会把缓存Cache里面数据换成个锁其它事务如果去取相应缓存Cache数据发现被锁了直接就去数据库查询;
CacheConcurrencyStrategy.NONSTRICT_READ_WRITE不严格读写模式则不会缓存Cache数据加锁;
CacheConcurrencyStrategy.TRANSACTIONAL事务模式指缓存Cache支持事务当事务回滚时缓存Cache也能回滚只支持JTA环境
另外还有如下注意事项:
1、查询缓存Cache需要在Query相应思路方法执行前加上这么句:
query.Cacheable(true);
在使用Hibernate时获得query有Cacheable思路方法可以设置使用缓存Cache但当使用JPA时javax.persistence.Query并没有Cacheable思路方法此时如果JPA实现是Hibernate时可以将其进行如下转化再Cacheable思路方法(如果JPA实现是其它ORMAP框架就不知道如何做了)
(query instanceof org.hibernate.ejb.QueryImpl) {
((org.hibernate.ejb.QueryImpl) query).getHibernateQuery.Cacheable(true);
}
2、还有就是查询缓存Cache查询执行后会将查询结果放入 2级缓存Cache中但是放入形式是以ID为Key例子作为个Value
3、hibernate配置文件中需加入如下信息:
<property name="hibernate.cache.provider_" value="org.hibernate.cache.EhCacheProvider" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
laiz:http://www.crazycoder.cn/Java/Article66168.html