Hibernate持久化对象状态和session缓存..pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hibernate持久化对象状态 和Session缓存 本篇内容 Hibernate中持久化对象的三种状态 Session缓存 一、持久化对象的三种状态 Hibernate以持久化对象(PO)为基础,通过操作PO对象,进一步操作与PO对象关联的数据库表记录 Hibernate编程,持久化对象主要存在三种状态 瞬时状态(transient state) 持久状态(persistent state) 脱管状态(detached state) 1.1 瞬时状态(transient state) 当程序中通过new操作符实例化一个PO对象,而这个对象还没有被Session对象操作,也就是没有和一个Session对象关联时,则称这个PO对象为瞬时状态对象 瞬时状态对象的特点: 没有与数据库表中的记录没有对应的映射关系 1.2 持久状态(persistent state) 如果一个PO对象与一个Session对象相关联,比如被Session对象保存的、加载的、更新的,则称这个PO对象为持久状态对象 “与Session对象相关联”: 意思是:被Hibernate Session对象所接管,处在Session对象工作单元之内 持久状态——session保存的 持久状态——session更新的 持久状态——session加载的 持久状态对象的特点 持久状态对象的特点: 与数据库表中的一条记录有对应的映射关系 与Session相关联,位于Session对象缓存之中 持久状态对象有改变,事务提交之后, Hibernate会自动检测到其变化,并将变化反映到数据库之中 1.3 脱管状态(detached state) 当与持久状态对象关联的Session关闭后,该对象就变成脱管状态对象 脱管状态对象的特点 脱管状态对象的特点: 与数据库表中的一条记录有对应的映射关系 没有与Session相关联,不位于Session对象缓存中 当脱管状态对象再次与某个Session关联(即被某个Session接管)后,又会转变为持久状态对象 1.4 Hibernate PO对象状态图 Hibernate持久化对象状态转变示例: 示例数据文件:data1 示例StudentTest测试类中的testAddAndUpdate方法 二、Session缓存 通过本小节,进一步理解Hibernate中的Session对象及工作原理 2.1 Hibernate Session Session的作用: Hibernate中的Session对象是用来进行数据操作的一个基本工作单元,通过Session对象对PO对象进行增、删、改、查等操作,进而执行对应数据表的相应操作 Session缓存: Hibernate Session对象维护着内存中的一块“缓存”空间,里面存放着持久状态对象 2.2 Session缓存的主要作用 “减少数据库访问频率”: 查询时,首先查看缓存中是否存在,存在直接引用,不存在再查询数据库 Session缓存示例 示例数据文件:data1 示例中StudentTest测试类的testGetStudent2()方法 实验前提:数据表中有对应记录可以读取加载 Session缓存的主要作用 “自动检查脏数据”(automatic dirty checking) Hibernate从数据库中加载对象时,会在Session缓存里为该对象复制一份原始快照(snapshot) 当Session清理缓存时,会将对象当前状态与原始快照进行对比,并将对比后的变动同步写回到数据库 默认下,当事务提交时,Hibernate会清理Session缓存,使缓存中对象状态与数据库保持一致 Session缓存示例 示例中StudentTest测试类的testUpdateStudent2 持久状态与脱管状态对象的区别 持久状态对象: 与数据库表中的一条记录有对应的映射关系 与Session相关联,位于Session对象缓存之中 脱管状态对象: 与数据库表中的一条记录有对应的映射关系 没有与Session相关联,不位于Session对象缓存中 持久状态对象有改变,事务提交后, Hibernate自动检测到其变化,并将变化反映到数据库之中,脱管状态对象则不具备该特点 示例(testUpdateStudent3方法) Session缓存的主要作用 “尽量延迟写入数据库的时间点,减少SQL语句的提交次数” Hibernate提交SQL语句的时机 当Session清理缓存时 其它一些特定情况,主要包括 通过get方法加载,或者通过HQL语言查询时 当主键生成方式为数据库自增,调用save方法时 理解Hibernate何时发送SQL语句 当Session对象清理缓存时,Hibe

文档评论(0)

didala + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档