




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
hibernate + jpa Cache 分类: cache 缓存缓存映射Cache mappings 1. 只读 缓存read only 2. 读写缓存 readwrite 3. 非严格读写缓存nonstrict readwrite 4. Hibernate Annotation 中配置EhCache缓存先了解一下cache基础:一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口list,filter,iterate时,如session缓存中还不存在相应的对象,Hibernate会把该对象加入到一级缓存中,当Session关闭的时候该Session所管理的一级缓存也会立即被清除Hibernate的一级缓存是Session所内置的,不能被卸载,也不能进行任何配置二级缓存配置: 1、首先要打开二级缓存,在hibernate.cfg.xml中添加如下配置: true 2、Hibernate的二级缓存使用第三方的缓存工具来实现,所以我们需要指定Hibernate使用哪个 缓存工具。如下配置指定Hibernate使用EhCache缓存工具。 org.hibernate.cache.EhCacheProvider 3、Hibernate在默认情况下并不会对所有实体对象进行缓存,所以,我们需要指定缓存哪些对象, 在实体对象的映射文件中(相应的标签内部),添加如下配置: usage=read-only是“只读”缓存策略。 注意,这个标签只能放在标签的内部,而且必须处在标签的前面! 这个标签放在哪些标签下面,就说明会多这些类的对象进行缓存 4、对于第3步,有一个可选的方案是在hibernate.cfg.xml文件中指定哪些类的对象需要缓存, 而不需要使用标签来指定。如: 在hibernate.cfg.xml中添加如下配置: 注意,这个标签必须放在标签的后面! Hibernate缓存配置_Hibernate的缓存分为:一级缓存:在Session级别的,在Session关闭的时候,一级缓存就失效了。二级缓存:在SessionFactory级别的,它可以使用不同的缓存实现,如EhCache、JBossCache、OsCache等。缓存的注释写法如下,加在Entity的java类上:Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)缓存的方式有四种,分别为:CacheConcurrencyStrategy.NONECacheConcurrencyStrategy.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(queryinstanceoforg.hibernate.ejb.QueryImpl) (org.hibernate.ejb.QueryImpl)query).getHibernateQuery().setCacheable(true);2、还有就是查询缓存的查询执行后,会将查询结果放入二级缓存中,但是放入的形式是以ID为Key,实例作为一个Value。3、hibernate的配置文件中需加入如下信息:缓存映射(Cache mappings) 类或者集合映射的“元素”可以有下列形式: (1)usage说明了缓存的策略: transactional、 read-write、 nonstrict-read-write或 read-only。 另外(首选?), 你可以在hibernate.cfg.xml中指定和 元素。 这里的usage属性指明了缓存并 发策略(cache concurrency strategy)。 只读 缓存(read only) 如果你的应用程序只需读取一个持久化类的实例,而无需对其修改, 那么就可以对其进行只读 缓存。这是最简单,也是实用性最好的方法。甚至在集群中,它也能完美地运作。 .读/写缓存( read/write) 如果应用程序需要更新数据,那么使用读/写缓存 比较合适。 如果应用程序要求“序列化事务”的隔离级别(serializable transaction isolation level),那么就决不能使用这种缓存策略。 如果在JTA环境中使用缓存,你必须指定hibernate.transaction.manager_lookup_class属 性的值, 通过它,Hibernate才能知道该应用程序中JTA的TransactionManager的 具体策略。 在其它环境中,你必须保证在Session.close()、或Session.disconnect()调用前, 整个事务已经结束。 如果你想在集群环境中使用此策略,你必须保证底层的缓存实现支持锁定(locking)。Hibernate内置的缓存策略并不支持锁定功能。 . . 非严格读/写缓存(nonstrict read/write) 如果应用程序只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离, 那么比较适合使用非严格读/写缓存策略。如果在JTA环境中使用该策略, 你必须为其指定hibernate.transaction.manager_lookup_class属性的值, 在其它环境中,你必须保证在Session.close()、或Session.disconnect()调用前, 整个事务已经结束-在jBPM 中使用不少这样的非严格读/写缓存的处理:它的ehcache.xml 是这样配置的:Hibernate Annotation 中配置EhCache缓存1. 首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:1. xml version=1.0 encoding=UTF-8? 2. 3. 4. 14. ehcache 2. 在Hibernate配置文件中设置:org.hibernate.cache.EhCacheProvidertrue此外,可以把cache.use_second_level_cache设置为false关闭所有的hibernate二级缓存。但此属性对指定的类缺省为true。3. 为了使用二级缓存,需要在每一个Hibernate Entity上配置。1. Entity 2. Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 3. public class Forest . 1. OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 2. JoinColumn(name=CUST_ID) 3. Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 4. public SortedSet getTickets() 5. return tickets; 6. 1. Cache( 2. CacheConcurrencyStrategy usage(); (1) 3. String region() default ; (2) 4. String include() default all; (3) 5. ) (1) usage: 提供缓存对象的事务隔离机制,可选值有以下几种(NONE, READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)(2) region (optional): 指定缓存的区域,默认是类的全限定名。利用缓存区域,可以更精确的指定每个区域的缓存超前策略。如果指定了缓存区域前缀(在 hibernate.cfg.xml中设置cache.region_prefix属性为一个字符串),则所有的缓存区域名前将加上这个前缀。(3) include (optional): all to include all properties, non-lazy to only include non lazy properties (default all).如果不是使用annotation的话,则是在Hbm文件中添加cache usage=read-only本次项目使用hibernate jpa, 其配置如下:jap的persistence.xml文件 org.hibernate.ejb.HibernatePersistenceIptvFeeORM.xmlcache.xml配置文件:spring引用的数据库配置文件 IptvFeeCperties :#database configjdbc.driver=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin::1521:lovejdbc.username=youjdbc.password=mejdbc.maxActive=5jdbc.maxIdle=5jpa.database=ORACLEjpa.showSql=truejpa.generateDdl=falsejdbc.getdate.sql=select sysdate from du
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台量子密钥分发技术产业创新与研发投入报告
- 2025年老年健康管理中慢性疼痛长期照护服务模式研究报告001
- 2025年新零售趋势分析报告:线上线下融合创新策略
- 考点攻克黑龙江省北安市7年级上册期末测试卷单元测评试题(详解版)
- 2025年教育信息化基础设施建设与教育信息化项目市场前景研究报告
- 2025年城市轨道交通智慧运维系统在地铁通信网络中的应用报告
- 基础强化人教版8年级数学下册《一次函数》专项训练试题(详解版)
- 护士企业编制面试题库及答案详解【必刷】
- 临床药物治疗学期末考试复习题库及答案详解【名校卷】
- 基础强化人教版8年级数学上册《全等三角形》专题训练试题(含答案解析版)
- 中级职称评审述职报告
- 2025年9月-2026年1月安全工作安排表
- 北京市律师协会律师办理法律尽职调查业务操作指引
- 在接受诫勉谈话时的检讨及整改情况报告
- 2025年四川省高考化学试卷真题(含答案解析)
- 难治性痛风中西医结合诊疗专家共识解读 4
- 小学生养成文明行为习惯自评检查表
- 2025山西航空产业集团有限公司校园招聘(第一批)43人笔试参考题库附带答案详解(10套)
- 2025年高级(三级)评茶员职业技能鉴定《理论知识》真题卷(后附答案及解析)
- 2024版电网典型设计10kV配电站房分册
- 献县地热管理办法
评论
0/150
提交评论