转载:Hibernate + JPA @Cache ._第1页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、转载:hibernate + jpa cache .一级缓存 hibernate 的一级缓存是由 session 提供的,因此它只存在于 session 的生命周期中,当程序调用 save(),up(),saveorupdate() 等办法 及调用查询接口 list,filter,iterate 时,如 session 缓存中还不存在相应的对象, hibernate 会把该对象加入到一级缓存中, 当 session 关闭的时候该 session 所管理的一级缓存也会立刻被清除 hibernate 的一级缓存是 session 所内置的,不能被卸载,也不能举行任何配置 二级缓存配置 1 、首先要

2、打开二级缓存,在 hibernate.cfg.xml 中添加如下配置: property name=hibernate.cache.use_second_level_cache ue /property 2 、 hibernate 的二级缓存用法第三方的缓存工具来实现,所以我们需要指定 hibernate 用法哪个 缓存工具。如下配置指定 hibernate 用法 ehcache 缓存工具。 property name=ver_class org.hibernate.cache.ehcacheprovider /property 3 、 hibernate

3、 在默认状况下并不会对全部实体对象举行缓存,所以,我们需要指定缓存哪些对象, 在实体对象的映射文件中(相应的 class 标签内部),添加如下配置: cache usage=read-only/ usage=read-only 是“只读”缓存策略。 注重,这个 cache 标签只能放在 class 标签的内部,而且必需处在 id 标签的前面! 这个 cache 标签放在哪些 class 标签下面,就解释会多这些类的对象举行缓存 4 、对于第 3 步,有一个可选的计划是在 hibernate.cfg.xml 文件中指定哪些类的对象需要缓存, 而不需要用法 cache 标签来指定。如: 在 hib

4、ernate.cfg.xml 中添加如下配置: class-cache usage=read-only / 注重,这个 class-cache 标签必需放在 map 标签的后面! hibernate缓存配置 _ hibernate的缓存分为: 一级缓存:在session级别的,在session关闭的时候,一级缓存就失效了。 二级缓存:在sessionfactory级别的,它可以用法不同的缓存实现,如ehcache 、jbosscache、oscache等。 缓存的注释写法如下,加在entity的java类上: cache(usage = cachecourrencystrategy.nonst

5、rict_read_write) 缓存的方式有四种,分离为: cacheconcurrencystrategy.none cacheconcurrencystrategy.read_only,只读模式,在此模式下,假如对数据举行更新操作,会有异样; cacheconcurrencystrategy.read_write,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务假如去取相应的缓存数据,发觉被锁了,挺直就去数据库查询; cacheconcurrencystrategy.nonstrict_read_write,不严格的读写模式则不会的缓存数据加锁; cacheconcurre

6、ncystrategy.transactional,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持jta环境。 另外还有如下注重事项: 1、查询缓存需要在query的相应办法执行前加上这么一句: query.cacheable(true); 在用法hibernate时,获得的query有setcacheable 办法,可以设置用法缓存,但当用法jpa时,javax.persistence.query并没有setcacheable办法,此时假如jpa的实现是hibernate时,可以将其举行如下转化,再调用setcacheable办法(假如jpa的实现是其它ormap框架,就不知道怎

7、么做了)。 if (query instanceof org.hibernate.ejb.queryimpl) (org.hibernate.ejb.queryimpl) query).gethibernatequery().setcacheable(true); 2、还有就是查询缓存的查询执行后,会将查询结果放入二级缓存中,但是放入的形式是以id为key,实例作为一个value。 3、hibernate的配置文件中需加入如下信息: property name=vider_class value=org.hibernate.cache.ehcachepro

8、vider / property name=hibernate.cache.use_second_level_cache value=true / property name=hibernate.cache.use_query_cache value=true / 缓存映射(cache mappings) 类或者集合映射的“ cache 元素”可以有下列形式: cache usage=transactional|read-|nonstrict-read-write|read-only (1) / usage 解释了缓存的策略: transactional 、 read-write 、 nons

9、trict-read-write 或 read-only 。 另外(首选?), 你可以在hibernate.cfg.xml中指定 class-cache 和 lection-cache 元素。 这里的usage 属性指明白缓存并 发策略(cache concurrency strategy) 。 只读 缓存(read only) 假如你的应用程序只需读取一个持久化类的实例,而无需对其修改, 那么就可以对其举行只读 缓存。这是最容易,也是有用性最好的办法。甚至在中,它也能完善地运作。 class name=eg.immutable mutable=fae cache usage=read-onl

10、y/ . /class 读/写缓存( read/write) 假如应用程序需要更新数据,那么用法读/写缓存 比较合适。 假如应用程序要求“序列化事务”的隔离级别(serializable transaction isolation level),那么就决不能用法这种缓存策略。 假如在jta环境中用法缓存,你必需指定hibernate.transaction.manager_up_class 属 性的值, 通过它,hibernate才干知道该应用程序中jta的transactionmanager 的 详细策略。 在其它环境中,你必需保证在session.close() 、或session.disconnect()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论