文档章节

Hibernate缓存配置

杭州_周陶忠
 杭州_周陶忠
发布于 2013/09/10 21:19
字数 494
阅读 71
收藏 0

这篇Blog是原来写在别的地方的,今天将其转到BlogJava上来。

-------------------------------------------------------------------------------

今天仔仔细细的看了一下Hibernate的缓存,并做了实例实践了一把。google一下,网上的教程、文章很多。

自己小结一下:

Hibernate的缓存分为:

  • 一级缓存:在Session级别的,在Session关闭的时候,一级缓存就失效了。
  • 二级缓存:在SessionFactory级别的,它可以使用不同的缓存实现,如EhCache、JBossCache、OsCache等。

缓存的注释写法如下,加在Entity的java类上:

  • @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

缓存的方式有四种,分别为:

  • CacheConcurrencyStrategy.NONE
  • CacheConcurrencyStrategy.READ_ONLY,只读模式,在此模式下,如果对数据进行更新操作,会有异常;
  • CacheConcurrencyStrategy.READ_WRITE,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;
  • CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不严格的读写模式则不会的缓存数据加锁;
  • CacheConcurrencyStrategy.TRANSACTIONAL,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持JTA环境。

另外还有如下注意事项:

1、查询缓存需要在Query的相应方法执行前加上这么一句:

query.setCacheable(true);

在使用Hibernate时,获得的query有setCacheable方法,可以设置使用缓存,但当使用JPA时,javax.persistence.Query并没有setCacheable方法,此时如果JPA的实现是Hibernate时,可以将其进行如下转化,再调用setCacheable方法(如果JPA的实现是其它ORMAP框架,就不知道怎么做了)。

if  (query   instanceof  org.hibernate.ejb.QueryImpl) {

((org.hibernate.ejb.QueryImpl) query).getHibernateQuery().setCacheable( true);

}

2、还有就是查询缓存的查询执行后,会将查询结果放入二级缓存中,但是放入的形式是以ID为Key,实例作为一个Value。

3、hibernate的配置文件中需加入如下信息:

< property   name ="hibernate.cache.provider_class"   value ="org.hibernate.cache.EhCacheProvider"   />
< property   name ="hibernate.cache.use_second_level_cache"   value ="true"   />
< property   name ="hibernate.cache.use_query_cache"   value ="true"   />



本文转载自:

杭州_周陶忠
粉丝 9
博文 32
码字总数 66340
作品 0
杭州
高级程序员
私信 提问
mybatis缓存机制与hibernate缓存机制

mybatis缓存分为1级缓存和2级缓存,2级缓存在sessionfactory中,1级缓存在session中。 session中的缓存在session连接关闭并被连接池回收时清理,或者手动清理 sessionfactory中的缓存需要在m...

HTCKF
2015/05/18
0
0
Hibernate与 MyBatis的比较

最近做了一个Hibernate与MyBatis的对比总结,希望大家指出不对之处。 第一章 Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分。 ...

jiyayun
2012/11/15
0
2
【Java框架】 Hibernate与Mybatis对比

Hibernate与Mybatis对比 今天同事跟我说现在的小规模公司很少用hibernate,大部分都用mybatis。平时也经常接触这两方面,正好最近不怎么忙,查看网上其他相关技术文档 ,梳理下Mybatis和Hib...

林元煌
2017/07/05
0
0
【持久化框架】Mybatis与Hibernate的详细对比

前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理。 Mybatis 【持久化框架】Mybatis简介与原理 【持久化框架】Spr...

sietai
2018/05/18
0
0
JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结

我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项...

AmyTian
2016/03/10
371
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件32-等待进度条控件

一、前言 在各种各样的执行任务界面,有时候需要比较多的时间,需要给出一个直观的等待进度条表示当前正在执行的进度,而不至于懵逼在那里,用户不会觉得程序死了还是干嘛了。 等待进度条有好...

飞扬青云
23分钟前
2
0
Packagist / Composer 中国全量镜像

还没安装 Composer 吗?请往下看如何安装 Composer 。 镜像用法 有两种方式启用本镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中。见“方法一” 单个...

mdoo
23分钟前
1
0
mnist文件格式说明

根据官网 http://yann.lecun.com/exdb/mnist/ 的文件格式的定义 TRAINING SET LABEL FILE (train-labels-idx1-ubyte): [offset] [type] [value] [description] 0000 32 bit integer 0x00000......

冷基
42分钟前
2
0
DNS域名解析命令 —— host

命令host 用途: 使用域名服务器查询主机名字 语法: ]# host [选项] 主机名 [服务器] 常用选项: -t 指定查询的域名信息类型 A CERT DNAME IPSECKEY MX N...

迷失De挣扎
58分钟前
3
0
Ubuntu tty中文字符乱码

默认的tty只能显示一个字节,我们可以用setfont命令去改tty字体,但仅仅局限在一个字节内,不支持UTF-8多字节,所以我们就没办法使用汉字。但是我们可以使用FbTerm啊!FbTerm是支持中文显示的...

mbzhong
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部