hibernate二级缓存:Hibernate缓存Cache配置

来源:互联网 发布:google play软件下载 编辑:程序博客网 时间:2024/06/06 00:59

今天仔仔细细看了下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