SSH——Hibernate初学者之旅(五)
之前我们学习了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初学者之旅(五)相关推荐
- SSH——Hibernate初学者之旅(四)
之前我们说到了一对一和一对多关系的几种映射类型,最后只剩下多对多关系的映射.一般来讲,我们会将多对多关系抽出第三张表,转化为一对多关系,但是难免会有一些特殊情况.今天我们就来看看多对多关系的映射. 一 ...
- Hibernate初学者教程
Hibernate初学者教程 欢迎来到Hibernate初学者教程.Hibernate是最广泛使用的Java ORM工具之一.大多数应用程序使用关系数据库来存储应用程序信息,在较低级别,我们使用JDB ...
- HALCON学习之旅(五)
HALCON学习之旅(五) 文章目录 HALCON学习之旅(五) 1.如何获取程序运行时间 2.如何将Bayer图像转换为彩色图像 3.如何将图像转化为矩阵形式 4.如何让图像自适应窗口(补充) 5. ...
- 打怪升级之小白的大数据之旅(五十九)<Hadoop优化方案>
打怪升级之小白的大数据之旅(五十八) Hadoop优化方案与扩展知识点 上次回顾 上一章,我们对Hadoop的扩展知识HA进行了学习,本章是我们在使用Hadoop过程中的一些优化方案和其他几个需要了解 ...
- EKP后端/开发/SSH - Hibernate常用操作(public)
最新笔记链接:https://app.yinxiang.com/fx/07a20d68-0a36-4018-be6b-715450c12e87 基础操作请看: SSH - 配置Service→Dao→ ...
- Apache Solr入门教程(初学者之旅)
2019独角兽企业重金招聘Python工程师标准>>> 写在前面:本文涉及solr入门的各方面,请逐行阅读,相信能帮助你对solr有个清晰全面的了解并能简单实用. 在Apache S ...
- hibernate mysql cascade_Hibernate第五篇【inverse、cascade属性详解】
前言 上一篇博文已经讲解了一对多和多对一之间的关系了,一对多和多对一存在着关联关系(外键与主键的关系).本博文主要讲解Inverse属性.cascade属性.这两个属性对关联关系都有影响 Invers ...
- J2ME 2D小游戏入门之旅(五) 实现爆炸效果、并加入道具导弹(转)
五.实现爆炸效果.并加入道具导弹 大多数游戏都有着丰富的效果类,在精灵移动类游戏中曾一度以此为一个重要的卖点,.光光是一些丰富的特效是不能够产生一个好的游戏的,但是一个好的游戏是万万不能缺少好的效果的 ...
- SSH远程连接服务(五)
文章目录 1. 端口号 2. ssh与telnet区别 3. telnet服务 4. ssh相关命令 4.1 ssh命令 4.2 scp远程拷贝命令 4.3 rz和sftp 5. 在Linux中ssh ...
最新文章
- 浙大吴飞「舌战」阿里贾扬清:AI内卷与年薪百万,哪个才是真实?
- python怎么做折线图_python怎么画折线图
- LuoguP2754 [CTSC1999]家园(分层图,最大流)
- 在Ubuntu中使用OTB-50测试ECO模型
- Docker 方式 部署 vue 项目 (docker + vue + nginx)
- feign踩坑_spring cloud fegin踩坑记录
- 写代码抽取代码的技巧
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny) 【转】
- SAP License:MIRO
- Golang 接口相等比较注意要点
- 头条 msra几道面试题
- Zotero文献管理 | Zotero下载使用、Zotero+坚果云实现多设备文献同步
- linux php-cli,php cli - shell语言的扩展利器 - Linux进阶, PHP技术 - freemouse-笔记-感悟-成长...
- 2021 王道考研 计算机网络+习题讲解
- mysql nlssort_Oracle中文排序 NLSSORT
- mysql中预设的拥有_MySQL中预设的、拥有最高权限超级用户的用户名为
- “今夜酒店特价”的商业模式是什么?www.souapp.com搜应用推荐
- App中WebView网页加载优化实战干货
- kiv8测量方法_云市场-404
- 动态规划之《高楼扔鸡蛋》问题详解 LeetCode 887.鸡蛋掉落
热门文章
- wechat-0051,微信公众号,第三方登录—扫码绑定
- 强制关闭计算机窗口,windows系统怎么取消关机时强制关闭程序提示窗口?
- element plus之el-table行融合+列融合+小计行+自定义控件+样式自定义方案
- 一切还要从副总裁在朋友圈卖内裤说起
- 小学五年级如何引导学计算机,怎么教五年级小孩数学
- iOS新闻类App内容页技术探索
- A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues论文笔记
- u盘数据恢复,教你轻松搞定!
- 怪物掉落装备修改属性
- 解决无线网络不稳定的两个方案几个方法