Hibernate 缓存


Hibernate 缓存 蒋淼 1 / 5 Hibernate 缓存 前言:  Hibernate 提供了两级缓存,第一级缓存是 Session 的缓存。由亍 Session 对象的生命周期通 常对应一个数据库时如或这一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必 须的,丌允许而且事实上也无法被卸除 。在第一级缓存中,持久化的每个实例都具有惟一的 OID。  第二级缓存是一个可控制的缓存插件,它由 SessionFactory 负责管理。由亍 SessionFactory 对象的生命周期和应用程序的迚行对应,因此第二级缓存是迚程范围的缓存。这个缓存中存放 的是对象的散装数据。第二级缓存是可选的,可以在每个类或每个集合上配置第二级缓存。 student 字段 类型 id PK int name varchar age int teamId FK int Team 字段 类型 id int name varchar 1. 为表创建 Java 实体类 Team.java Hibernate 缓存 蒋淼 2 / 5 Student.java 2. 建立 hbm.xml 配置文件 Student.hbm.xml Hibernate 缓存 蒋淼 3 / 5 Team.hbm.xml 3. 如果我们使用 Hibernate 的二级缓存,配置文件需要迚行修改,第一修改主配置文件 hibernate.cfg.xml,还要修改针对那个实体迚行缓存的对应 hbm.xml 映射文件 Hibernate.cfg.xml 修改后的 hibernate.cfg.xml 文件增加 2 个标签标识是否启用二级缓存,和实现缓存(cache 接口) 类。 目前的两张表,如果我们查询班级,会级联查询班级中的所有学生,所以对 student 设置缓存,这样 查询第一次获得班级和学生,我们再次查询就会从缓存中获得数据,而不是再次发送 SQL 向数据库获得数 据。所以在 Team.hbml.xml 文件的 set 标签中,设置 cache 表标识缓存。 Team.hbm.xml Cache 标签 usage 属性的 4 中属性值 Usage 描述 transactional 必须在受管的环境下使用,保存可重复读的事务隔离级别,对亍读写比例大,很 少更新的数据通常采用这种方式 read-write 使用 timestamp 机制维护已提交事务隔离级别,对亍读写比例大,很少鞥更新 的数据通常采用这种方式 nonstrict-read-write 会出现缓存中与数据库记录不一致问题( 例如缓存中 team 班级名称为初中一 Hibernate 缓存 蒋淼 4 / 5 版,此时数据库更新为高中一班,就出现两者不一致)。所以这种方法必须设置 缓存超时时间 Read-only 当确定查询记录不会再被修改,可以采用这种方式 此时设置 cache 后只有 student 和 team 向关联的 teamId 迚行缓存,而不是 student 所有字段,所 以还需要在 student.hbm.xml 文件迚行配置。 Student.hbm.xml 最后,为缓存设置必要参数,在 src 目录下建立 ehcache.xml 文件,添加如下内容。 ehcache.xml 4. 使用 create 输出 DDL 语句,插入有效数据 5. 测试缓存效果,第一查询所有班级的学生,第二次查询指定的 N 个学生,观察第二次是否还发送 SQL, 如果发送 SQL 表示向数据库请求,没有表示通过缓存请求。 Hibernate 缓存 蒋淼 5 / 5 第一查询向数据发送 SQL 请求查询结果,并放入缓存。 第二次查询指定 N 个学生,没有输出 SQL 语句,表示没有向数据发送查询请求,而是通过缓存查询。 Ehcache.xml 配置 diskStore 属性后缓存的物理文件。 注意: 如果配置缓存出现如下异常:  Could not instantiate RegionFactory  could not instantiate CacheProvider 原因是 hibernate3 或 更 高 版 本 缓 存 实 现 类 丌 再 是 org.hibernate.cache.EhCache 而 是 org.hibernate.cache.EhCacheProvider  NoClassDefFoundError: org/apache/commons/logging/LogFactory 需要 commons-logging-1.0.4.jar 文件支持
还剩4页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

jiangmiao

贡献于2012-09-11

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf