之前我们学习了hibernate中的映射关系,接下来我们看看hibernate中的缓存机制,在了解缓存机制之前,我们要先了解一下hibernate中对象的几种状态。

一、三种状态

大家都知道,Java对象的生命周期,是从通过new语句创建开始,到不再被任何引用变量引用结束,结束后它占用的内存将被JVM垃圾回收机制收回。在Hibernate持久化对象可以划分为三种状态,分别是瞬态,持久态,脱管态。

1、瞬态(Transient)

  • 概念

也叫临时态。使用new操作符初始化的对象不是立刻就持久化的。他们的状态是瞬时的,也就是说他们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其他对象所引用),他们的状态将会丢失,并由垃圾回收机制回收。

  • 特征
不在Session的缓存中,不与任何的Session实例相关联。
在数据库中没有与之相对应的记录。

2.持久态(Persistent)

  • 概念

    持久实例是任何具有数据库标识的实例。它有持久化管理器Session统一管理,持久实例是在事务中进行操作的———他们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL的INSERT,UPDATE和DELETE语句把内存中的状态同步到数据库中。
    持久化对象的特征。

  • 特征

位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联。
 持久化对象和数据库中的相关记录对应。
Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库。

3.脱管态(Detached)

  • 概念

也叫游离态。Session关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,他们不再受Hibernate管理。

  • 特征
不在Session的缓存中,不与任何的Session实例相关联。
游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录。
(前提条件是没有其他Session实例删除该条记录)。

二、状态转换

1、进入临时状态

(1) 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。
      (2) Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录;对于持久化对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除。

2、进入持久化状态

(1) Session的save()方法把临时对象转变为持久化对象。
      (2) Session的load()或get()方法返回的对象总是处于持久化状态。
      (3) Session的find()方法返回的List集合中存放的都是持久化对象。
      (4) Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。
      (5)当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。

3、进入游离态

(1) 当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。
      (2)Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保存了大量的持久化对象,会消耗许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。但是多数情况下不推荐使用evict()方法,而应该通过查询语言,或者显式的导航来控制对象图的深度。

三、生命周期

创建一个Java对象时,JVM会为这个对象分配一个内存空间,只要这个对象被引用变量引用,就一直存在于内存中,如果一个对象不被任何引用变量引用,就结束生命周期。Java集合(List、Map、Set)存放的是Java对象的引用,当向集合中添加一个对象时,其实是把这个对象的引用添加到集合中。因此集合中含有的对象生命周期一直存在。

1、过程

开始生命周期——》临时状态——》持久化状态——》游离状态——》结束生命周期

2、状态与session缓存关系

临时状态(transient):刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象称为临时对象。
      持久化状态(persistent):已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象称为持久化对象。
      游离状态(detached):已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象称为游离对象。

总结:

通过这次学习,我们知道了Java对象的三种状态:临时状态,持久化状态,游离状态。知道了状态之间的转化,也知道了一个对象的整个生命周期。但是我们了解的还不太深入,还需要在实际应用中去体会,继续深入学习。下次我们将介绍hibernate中的缓存机制。

SSH——Hibernate初学者之旅(五)相关推荐

  1. SSH——Hibernate初学者之旅(四)

    之前我们说到了一对一和一对多关系的几种映射类型,最后只剩下多对多关系的映射.一般来讲,我们会将多对多关系抽出第三张表,转化为一对多关系,但是难免会有一些特殊情况.今天我们就来看看多对多关系的映射. 一 ...

  2. Hibernate初学者教程

    Hibernate初学者教程 欢迎来到Hibernate初学者教程.Hibernate是最广泛使用的Java ORM工具之一.大多数应用程序使用关系数据库来存储应用程序信息,在较低级别,我们使用JDB ...

  3. HALCON学习之旅(五)

    HALCON学习之旅(五) 文章目录 HALCON学习之旅(五) 1.如何获取程序运行时间 2.如何将Bayer图像转换为彩色图像 3.如何将图像转化为矩阵形式 4.如何让图像自适应窗口(补充) 5. ...

  4. 打怪升级之小白的大数据之旅(五十九)<Hadoop优化方案>

    打怪升级之小白的大数据之旅(五十八) Hadoop优化方案与扩展知识点 上次回顾 上一章,我们对Hadoop的扩展知识HA进行了学习,本章是我们在使用Hadoop过程中的一些优化方案和其他几个需要了解 ...

  5. EKP后端/开发/SSH - Hibernate常用操作(public)

    最新笔记链接:https://app.yinxiang.com/fx/07a20d68-0a36-4018-be6b-715450c12e87 基础操作请看: SSH - 配置Service→Dao→ ...

  6. Apache Solr入门教程(初学者之旅)

    2019独角兽企业重金招聘Python工程师标准>>> 写在前面:本文涉及solr入门的各方面,请逐行阅读,相信能帮助你对solr有个清晰全面的了解并能简单实用. 在Apache S ...

  7. hibernate mysql cascade_Hibernate第五篇【inverse、cascade属性详解】

    前言 上一篇博文已经讲解了一对多和多对一之间的关系了,一对多和多对一存在着关联关系(外键与主键的关系).本博文主要讲解Inverse属性.cascade属性.这两个属性对关联关系都有影响 Invers ...

  8. J2ME 2D小游戏入门之旅(五) 实现爆炸效果、并加入道具导弹(转)

    五.实现爆炸效果.并加入道具导弹 大多数游戏都有着丰富的效果类,在精灵移动类游戏中曾一度以此为一个重要的卖点,.光光是一些丰富的特效是不能够产生一个好的游戏的,但是一个好的游戏是万万不能缺少好的效果的 ...

  9. SSH远程连接服务(五)

    文章目录 1. 端口号 2. ssh与telnet区别 3. telnet服务 4. ssh相关命令 4.1 ssh命令 4.2 scp远程拷贝命令 4.3 rz和sftp 5. 在Linux中ssh ...

最新文章

  1. 浙大吴飞「舌战」阿里贾扬清:AI内卷与年薪百万,哪个才是真实?
  2. python怎么做折线图_python怎么画折线图
  3. LuoguP2754 [CTSC1999]家园(分层图,最大流)
  4. 在Ubuntu中使用OTB-50测试ECO模型
  5. Docker 方式 部署 vue 项目 (docker + vue + nginx)
  6. feign踩坑_spring cloud fegin踩坑记录
  7. 写代码抽取代码的技巧
  8. 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny) 【转】
  9. SAP License:MIRO
  10. Golang 接口相等比较注意要点
  11. 头条 msra几道面试题
  12. Zotero文献管理 | Zotero下载使用、Zotero+坚果云实现多设备文献同步
  13. linux php-cli,php cli - shell语言的扩展利器 - Linux进阶, PHP技术 - freemouse-笔记-感悟-成长...
  14. 2021 王道考研 计算机网络+习题讲解
  15. mysql nlssort_Oracle中文排序 NLSSORT
  16. mysql中预设的拥有_MySQL中预设的、拥有最高权限超级用户的用户名为
  17. “今夜酒店特价”的商业模式是什么?www.souapp.com搜应用推荐
  18. App中WebView网页加载优化实战干货
  19. kiv8测量方法_云市场-404
  20. 动态规划之《高楼扔鸡蛋》问题详解 LeetCode 887.鸡蛋掉落

热门文章

  1. wechat-0051,微信公众号,第三方登录—扫码绑定
  2. 强制关闭计算机窗口,windows系统怎么取消关机时强制关闭程序提示窗口?
  3. element plus之el-table行融合+列融合+小计行+自定义控件+样式自定义方案
  4. 一切还要从副总裁在朋友圈卖内裤说起
  5. 小学五年级如何引导学计算机,怎么教五年级小孩数学
  6. iOS新闻类App内容页技术探索
  7. A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues论文笔记
  8. u盘数据恢复,教你轻松搞定!
  9. 怪物掉落装备修改属性
  10. 解决无线网络不稳定的两个方案几个方法