hibernate数据修改后不能及时更新 -.pdf

hibernate数据修改后不能及时更新 -.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
hibernate数据修改后不能及时更新 -

主要表现在新增、修改数据后,在数据列表中不能显示刚插入数据的关联对象的信息 (新增插入 或修改的数据主数据能显示,只有关联的数据不能显示),但刷新后能显示,再刷新可能又显示 不出来了。随机的能显示或不能显示。搞不懂。 当你手动修改了数据库,Hibernate缓存中的数据就有可能是过期的。为了保证Hibernate与数据 库一致,一般的 做法是在手动修改数据库之后,使用Hibernate查询数据之前,清空缓存。也就是说,你应该在执 行查询前,调用 session.clear(). 参考:hibernate缓存管理 1.缓存概述 缓存(cache)在java应用程序中是一组内存中的集合示例,它保存着永久性存储源(如硬盘上的文 件或数据库)中数据的备份,它的读写速度比读写硬盘的速度快。应用程序在运行时直接读写缓存 中的数据,只在某些特定时刻按照缓存中的数据来同步更新数据存储源。如果缓存中存放的数据 量非常大,也会用硬盘作为缓存的物理介质 缓存的作用就是降低应用程序直接读写永久性数据存储源的频率,从而增强应用的运行性能 缓存的实现不仅需要作为物理介质的硬件 (内存),同时还需要用于管理缓存的并发访问和过 期等策略的软件 2.缓存范围分类 缓存的范围决定了缓存的声明周期以及可以被谁访问。总共分三类 1)事务范围 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联 的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束. 事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围. 2 )应用范围 (也叫进程范围) 应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期, 只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘作为存储介质, 二级缓存就属于应用范围. 3 )集群范围 在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个 进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数 据形式. 对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,因为访问的速度不一定回避 直接访问数据库数据的速度快很多 3.缓存的并发访问策略 当多个并发的失误同时访问持久化层的缓存的相同数据时,会引发起并发问题,必须采用必要的 失误隔离措施 在进程范围或集群范围的缓存,会出现并发问题,因此可以设定一下四种类型的并发访问策 略,每一种策略对应一种事务隔离级别。事务型并发访问策略是事务隔离级别最高,只读型的隔 离级别最低。事务隔离级别越高,并发性能就越低  1)事务型:仅仅在受管理环境中适用。它提供了Repeatable Read事务隔离级别。对于经常被 读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问 题。  2 )读写型:提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。对于经常被 读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。  3 )非严格读写型:不保证缓存与数据库中数据的一致性。如果存在两个事务同时访问缓存中 相同数据的可能,必须为该数据配置一个很短的数据过期时间,从而尽量避免脏读。对于极少被 修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。    4 )只读型:对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。 Hibernate 中的缓存 hibernate 中提供两级缓存,第一级别是Session级别的缓存,它是属于事务范围的缓存,第二级 别的缓存是SessionFactory级别的缓存,它是属于进出呢个范围或集群范围的缓存。这一级别的 缓存可以进行配置和更改,并且可以进行动态的加载和卸载。Hibernate还为查询结果提供了一个 查询缓存,它依赖于第二级缓存 一级缓存的管理: Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当 程序调用save(),update(),saveorupdate()等方法 及调用查询接口list,filter,iterate时,如 session缓存中还不存在相应的对象,Hibernate会把该对象加入到一级缓存中, 当Session关闭的时候该Session所管理的一级缓存也会立即被清除 Hibernate的一级缓存是Session所内置的,不能被卸载,也不能进行任何配置 一级缓存采用的是key-val

文档评论(0)

l215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档