(转)Hibernate框架基础——在Hibernate中java对象的状态
http://blog.csdn.net/yerenyuan_pku/article/details/52760627
在Hibernate中java对象的状态
Hibernate把对象分为4种状态:
- 临时状态
- 持久化状态
- 游离状态
- 删除状态
Session的特定方法能使对象从一个状态转换到另一个状态。
临时对象(transient)
- 在使用代理主键的情况下,OID通常为null。
- 不处于Session的缓存中。
Session里面是有一个集合的,这个集合我们称为Session的缓存,叫做一级缓存,它会引用Session要管理的对象。 - 在数据库中没有对应的记录。
在以下情况下,Java对象进入临时状态。
- 当通过new语句刚创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应。
持久化对象(也叫”托管”)(Persist)
- OID不为null。
- 位于Session缓存中。
- 持久化对象和数据库中的相关记录对应。
- Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库。
- 在同一个Session实例的缓存中,数据库表中的每条记录只对应唯一的持久化对象。
Session的许多方法都能够触发Java对象进入持久化状态:
- Session的save()方法把临时对象转变为持久化对象。
- Session的load()或get()方法返回的对象总是处于持久化状态。
- Session的update()、saveOrUpdate()和lock()方法使游离对象转变为持久化对象。
- 当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象。
游离对象(也叫”脱管”)(Detached)
- OID不为null。
- 不再处于Session的缓存中。
- 一般情况下,游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录。
- 修改此状态对象时数据库不会有变化。
Session的以下方法使持久化对象转变为游离对象:
- 当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这些游离对象,它们就会结束生命周期。
- Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保留了大量的持久化对象,会消耗许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。
删除对象(Removed)
- OID不为null。
- 从一个Session实例的缓存中删除。
- 执行了delete()后的对象。
- Session已经计划将其从数据库删除,Session在清理缓存时,会执行SQL delete语句,删除数据库中的对应记录。
- 一般情况下,应用程序不该再使用被删除的对象。
对象的状态转换说明
对象的状态转换图:
对象的状态总结
状态 | Session缓存存在对应的记录 | 数据库中存在对应的记录 |
---|---|---|
临时状态 | no | no |
持久化状态 | yes |
可能有也可能没,如:Customer c=new Customer(); session.save(c); // 持久对象,但数据库中没有
|
游离状态 | no | 可能有(数据没有删除)也可能没有 |
转载于:https://www.cnblogs.com/telwanggs/p/6963442.html
(转)Hibernate框架基础——在Hibernate中java对象的状态相关推荐
- (转) Hibernate框架基础——操纵持久化对象的方法(Session中)
http://blog.csdn.net/yerenyuan_pku/article/details/52761021 上一篇文章中我们学习了Hibernate中java对象的状态以及对象的状态之间如 ...
- (转)Hibernate框架基础——一对多关联关系映射
http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础--映射集合属性详细讲解的是值类型的集合(即 ...
- jsp九大内置对象与servlet中java对象
jsp九大内置对象 request对象 : getParameter(String name)获取表单提交的数据 getParamegerNames() 获取客户端提交的所有参数名 getAttrib ...
- (转)Hibernate框架基础——Java对象持久化概述
http://blog.csdn.net/yerenyuan_pku/article/details/52732990 Java对象持久化概述 应用程序的分层体系结构 基于B/S的典型三层架构 说 ...
- (转)Hibernate框架基础——映射主键属性
http://blog.csdn.net/yerenyuan_pku/article/details/52740744 本文我们学习映射文件中的主键属性,废话不多说,直接开干. 我们首先在cn.it ...
- Hibernate框架基础——Hibernate入门
Hibernate入门 Hibernate介绍 Hibernate是一个基于jdbc的开源的持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作.Hibernate对JDBC访问数据 ...
- (转)Hibernate框架基础——映射集合属性
http://blog.csdn.net/yerenyuan_pku/article/details/52745486 集合映射 集合属性大致有两种: 单纯的集合属性,如像List.Set或数组等集合 ...
- Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 说明
1 主配置文件 Hibernate.cfg.xml 主配置文件中主要配置:数据库连接信息.其他参数.映射信息! 常用配置查看源码: hibernate-distribution-3.6.0.Final ...
- 【JAVA基础知识总结】JAVA对象转型之上转型对象与下转型对象
2019独角兽企业重金招聘Python工程师标准>>> JAVA对象转型分为两种:一种叫向下转型,而另一种是向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型) ...
最新文章
- Hadoop运维记录系列(二十二)
- win10系统启动服务器不可用,解决win10专业版windows installer服务不可用不能启动更不能访问...
- python多边形裁剪
- 课时 21:Kubernetes 存储架构及插件使用(阚俊宝)
- java编程的例子_java编程实例
- ROBOMASTER 2018机甲大师赛 南部赛区三等奖!
- 想靠写程序赚更多钱,写到两眼通红,写得比别人都又快又好好几倍,结果又能如何?...
- Codeforces Round #716 (Div. 2) D(随机算法)
- C++笔记------static 和 const 在类中用法
- [py]py常用模块小结
- 设定open_basedir导致PHP程序无法上传
- ActiveMQ消息队列介绍
- 目标检测综述学习笔记
- Pdf怎么设置页码,从正文开始
- Java是什么,Java是什么意思
- 面向对象(高级)章节练习题
- python文档学习
- 商业分析师应如何构建一个商业故事
- i5 11400f和i5 11400区别?哪个好?深度爆料评测
- NBA live 08 游戏解说翻译和球队战术
热门文章
- PartitionAssignor分析
- (83)FPGA仿真完成激励(finish)
- 按键检测框架单击-双击-连按
- 2020.xilinx开发环境
- 利用python安装opencv_科学网—Anaconda Python PyCharm PyQT5 OpenCV PyTorch TF2.0 安装指南 - 张重生的博文...
- 【STM32】【STM32CubeMX】STM32CubeMX的使用之五:定时器时基配置及其中断
- Linux netfilter源码分析(6)
- android 音量级别调节,调整Android音量等级及默认音量
- 计算机二级mysql工具_2020年全国计算机二级MySQL复习知识点:优化工具
- php 网站干货,杂谈:优秀的php解密网站和工具网站推荐