hibernate在持久对象的生命周期(三州:自由状态,持久状态,自由状态 之间的转换)
三种状态的基本概念:
1。 临时身份(Transient):也被称为自由状态,它只存在于内存中,并且在数据库中没有相应的数据。
使用new创建的对象,久化,没有处于Session中,处于此状态的对象叫暂时对象;
2, 持久化状态(Persistent):与session关联而且在数据库中有对应数据。
已经持久化。增加到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;
3, 游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。
特点:已经持久化,但不在Session缓存中。
处于此状态的对象叫游离对象;
|
×√ |
暂时状态 (Transient) |
持久化状态 (Persistent) |
游离状态 (Detached) |
|
是否处于Session缓存中 |
× |
√ |
× |
|
数据库中是否有相应记录 |
× |
√ |
√ |

游离对象和暂时对象异同:
两者都不会被Session关联,对象属性和数据库可能不一致;
游离对象有持久化对象关闭Session而转化而来,在内存中还有对象所以此时就变成游离状态了;
Hibernate和SQL的关系:
在操作了hibernate的方法如save()等后。并没有直接生成sql语句,去操作数据库。而是把这些更新存入Session中。仅仅有Session缓存要被更新时,底层的sql语句才干运行,数据存入数据库。
以下举例说明:
一,Session.save(user)执行机理。
1,把User对象增加缓存中。使它变成持久化对象。
2。选用映射文件指定的标识生成ID。
3,在Session清理缓存时候运行:在底层生成一个insert sql语句,把对象存入数据库;
注意:在你运行Session.save(user)后,在Session清理缓存前。假设你改动user对象属性值。那么终于存入数据库的值将是最后改动的值;此过程中ID不能被改动;
二,Session.delete(user)执行过程。
假设user是持久化对象,则运行删除操作,相同底层数据库的运行条件是:在Session清理缓存时候;
假设user是游离对象:
1。将user对象和Session关联。使之成为持久化对象;
2。然后依照user 是持久化对象的过程运行;
三态之间的转换方法:
①怎样成为自由态?对象通过构造方法成为自由态。持久态和游离态则通过session的delete方法成为自由态
②怎样成为持久态?对象能够由session的load或get方法直接成为持久态;自由态对象能够通过save。saveOrUpdate或persist方法成为持久态。游离态对象则能够通过update,saveOrUpdate成为持久态
③怎样成为游离态?游离态仅仅能由持久态转换而来。通过close或clear方法实现。
几种转换方法的对照:
1.get 与load
都是从数据库中载入数据封装为java对象,使得java对象从自由态直接变为持久态;
可是有两点差别:①get返回对象能够为null。load返回值则始终不为null,找不到时会抛异常②get即时运行insert,而load则是在使用此对象时才运行insert
2.save,update与saveOrUpdate
save是将自由态转为持久态。而update是将游离态转为持久态,saveOrUpdate能够说是两者的综合,它运行时先推断对象的状态(主要是通过有无主键推断的),若是自由态,则save。若是游离态。则update
3.save与persist
两者都是将对象由自由态转为持久态,但返回值不同:save返回主键值,而persist不返回
4,saveOrUpdate与merge
两者都是将自由态或游离态对象与数据库关联。但merge不改变对象的原有状态
而且,至clear与flush该方法也可以引入。clear这是session这些对象都成为自由状态。由一个自由国家的持久化对象的方法来说明(第二个被关闭session);flush为了使方法update操作可立即(在正常情况下,。只有当所述交易被关闭update操作)。
hibernate在持久对象的生命周期(三州:自由状态,持久状态,自由状态 之间的转换)的更多相关文章
- Hibernate中Java对象的生命周期
一个对象的出生源于我们的一个new操作,当我们使用new语句创建一个对象,这个对象的生命周期就开始了,当我们不在有任何引用变量引用它,这个对象就的生命就此结束,它占用的内存就可以被JVM的垃圾回收器回 ...
- Hibernate实体对象的生命周期(三种状态)
瞬时状态(Transient) 通过new创建对象后,对象并没有立刻持久化,它并未与数据库中的数据有任何关联,此时Java对象的状态为瞬时状态. Session对于瞬时状态的Java对象是一无所知的, ...
- hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)
三态的基本概念: 1, 暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象 ...
- Hibernate入门(3)- 持久对象的生命周期介绍
在hibernate中对象有三种状态:瞬时态(Transient). 持久态(Persistent).脱管态或游离态(Detached).处于持久态的对象也称为PO(Persistence Objec ...
- hibernate中持久化对象的生命周期(转载)
三态的基本概念 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: 2 ...
- Hibernate学习(4)- Hibernate对象的生命周期
1.Hibernate对象的生命周期(瞬时状态.持久化状态.游离状态) 1.瞬时状态(Transient): 使用new操作符初始化的对象就是瞬时状态,没有跟任何数据库数据相关联:2.持久化状态(Pa ...
- 【Hibernate步步为营】--核心对象+持久对象全析(三)
上篇文章讨论了Hibernate持久对象的生命周期,在整个生命周期中一个对象会经历三个状态,三种状态的转换过程在开发过程中是可控的.并且是通过用法来控制它们的转化过程.详细的转化过程今天就来着重讨论下 ...
- java之hibernate之session中对象的生命周期
1. session是用来执行对象的crud操作,并且session是对象事务工厂.session是线程级别的,所以生命周期比较短. 2.session中对象的生命周期图: 3.session中对象的 ...
- [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- 它们的定义UIAlertView
code4App有很多伟大的上方UI特效代码,,好牛逼啊,这效果,太炫了,哇,怎么自己写不出来.事实上,再炫的特效,都是依据苹果系统的框架而来,假设我们了解系统框架实现的原理,也就能写出属于自己自己定 ...
- WinDbg调试.NET
WinDbg调试.NET程序入门 俗话说:万事开头难! 自从来到新公司遇到性能问题后,需要想办法解决这个问题,但是一直没有合适的性能分析工具,然后找到StevenChennet 大神帮忙,他用WinD ...
- JavaScript面向对象旅程(下)
JavaScript面向对象旅程 剪不断,理还乱,是离愁. 前面已经提到过新语言开发的两个步骤,分别是:一.定义基本的数据类型,完善结构化编程语言的设计:二.为函数类型绑定this的概念,好在对象的方 ...
- UVa 10285 - Longest Run on a Snowboard
称号:给你一个二维矩阵,找到一个点.每一个可以移动到的位置相邻的上下,求最长单调路径. 分析:贪婪,dp.搜索. 这个问题是一个小样本,我们该怎么办. 这里使用贪心算法: 首先.将全部点依照权值排序( ...
- tortoise svn无法识别subversion check向下代码来解决
使用eclipse小工具subversion check代码后,tortoise svnclient(版本号1.8.8)无法识别,不显示svn图标. 根据每个试验后的线上不实际的解决方案.试过的方法: ...
- UI測试内容
我们在实际工作其中,针对web应用程序,也就是常常所说的B/S系统,能够从例如以下方面来进行用户界面測试: 导航測试 导航描写叙述了用户在一个页面内操作的方式,在不同的用户接口控制之间,比如butto ...
- 測试之路2——对照XML文件1
才来几天,老大又给了我一个新的任务.不像曾经的建100个任务project那么坑爹,却还是顿时让我感觉压力山大. 由于在这之前,我改了他写的例程,用于生成新的任务项目,事实上任务项目就是通过XML文件 ...
- oracle_导入、导出数据
逐步整理oracle导入导出数据 1.单表,不同库之间的导入导出 导出exp system/manager@myoracle file=d:\daochu.dmp tables=(table1) sy ...
- mysql_MYSQL远程登录权限设置
Mysql默认关闭远程登录权限,如下操作允许用户在任意地点登录: 1. 进入mysql,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ...
- shell的定义
shell一些符号区别对待不同的定义.主要的定义3途径: (1)单引號 (2)双引號 (3)反引號 我们最经常使用的就是双引號和单引號.对于这2个符号,用$变量能够非常清楚的说明它们的差别,例如以下: ...