Hibernate PO对象的状态
Hibernate的PO对象有三种状态:临时状态(又称临时态)、持久状态(又称为持久态)和脱管状态(又称为脱管态、游离态)。处理持久态的对象也称为PO,临时对象和脱管对象也称为VO。
1、临时态:
简单来说,由new命令开辟内存空间时刚生成的java对象就是处于临时态。
比如:
User user = new User();
如果没有变量对该对象进行引用,它将被java虚拟机回收。
临时对象在内存中是孤立存在的,它是携带信息的载体,不和数据库的数据有任何关联关系。在hibernate中,可以通过Session的save()或者savaOrUpdate()方法将临时对象与数据库相关联,并插入数据库,转变成持久化对象。
2、持久态:
持久化状态,该对象在数据库中具有对应的一条记录,并拥有一个持久化标识(如:Integer id 其实对应的就是记录表的一个主键)。如果hibernate 中的Dao层方法delete(),就会把对应的持久化对象变为临时对象,对应数据库中的记录也会被删除,不再与数据库的记录关联。
总结一下,持久化对象特点:
(1)和Session实例关联;
(2)与数据库中有与之关联的记录;
3、脱管态(游离态):
当与某持久化对象关联的Session被关闭后,该持久化对象转变为脱管对象。脱管对象被重新关联到Session上时,将再次转变成持久化对象。
注意:脱管对象拥有数据库的识别值,可通过update()、savaOrUpdate()等方法,转变成持久对象。
脱管对象特点:
(1)本质上与临时对象相同,在没有任何变量引用它时,JVM会在核实的时候将它回收;
(2)比临时对象多了一个数据库记录标识值;
4、Session中常用方法对PO对象状态的作用

临时状态、持久化状态和脱管状态(也就是游离状态),三种状态转化的方法都是通 过session来调用,瞬态到持久态的方法有save()、saveOrUpdate()、get()、load();持久态到瞬态的方法有 delete();游离态到持久态的方法有update()、saveOrUpdate()、lock();持久态到游离态的方法 有:session.close()、session.evict()、session.clear()。
5、save()和update()的区别
save()的作用是保存一个新的对象,update()可以把一个脱管状态的对象(一定要和一个记录对应)更新到数据库。
6、update()和saveOrUpdate()区别
saveOrUpdate()方法基本上就是合成了save()和update()
通常下面的场景会使用到update()和saveOrUpdate()::
(1)程序在第一个Session中加载对象,接着把Session()关闭;
(2)该对象被传递到表示层;
(3)对象发生了一些改动;
(4)该对象被返回到业务逻辑层最终到达持久层;
(5)程序创建第二个Session,调用第二个Session的update()方法持久化这些改动
Hibernate PO对象的状态的更多相关文章
- Hibernate框架--对象的状态,缓存, 映射
回顾Hibernate第二天: 1. 一对多与多对一 2. 多对多 3. inverse/cascade 4. 关联关系的维护 一对多: <set name="映射的集合属性&quo ...
- Hibernate持久化对象的状态
1. 站在持久化的角度 , Hibernate 把对象分为 4 种状态 : 持久化状态, 暂时状态, 游离状态(脱管状态) , 删除状态.Session 的特定方法能使对象从一个状态转换到还有一个状态 ...
- Hibernate 持久化对象的状态
持久化对象有3种状态:1.持久化状态 2.临时状态 3.游离状态 Session 的特定方法能使对象从一个状态转换到另一个状态临时对象(transient)• 在使用代理主键 ...
- 1.1Hibernate持久化类和Hibernate持久化对象状态
一.持久化对象po类 1.po定义 PO,是Persistent Object的缩写,是持久化类.PO是由PO=POJO+hbm映射配置组成. 2.通俗理解 PO类即持久化类,其实就是一个普通的Jav ...
- hibernate映射对象三种状态的分析
一,首先hibernate中对象的状态有 三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate(). get().lo ...
- Hibernate之对象的三种状态
Hibernate之Java对象的三种状态 一.简述 本博文大部分的思想和内容引子CSND上名为 FG2006 这位大神的文章,连接地址为:http://blog.csdn.net/fg2006/ar ...
- 我对hibernate的对象的3种状态的理解
老师的说法 Hibernate中对象的状态 在Hibernate使用中,对象的状态有以下三种 a.临时对象 : 在程序中使用new方式创建的对象 b.持久对象 : 在程序中与sess ...
- Hibernate中的对象状态,及自动更新原因,Hibernate set对象后不调用update却自动更新
原文:http://www.cnblogs.com/xiaoda/p/3225617.html Hibernate的对象有三种状态,分别为:瞬时状态 (Transient). 持久化状态(Persis ...
- 关于hibernate中对象的三种状态分析
一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...
随机推荐
- javasscript学习笔记 之 数组学习二 数组的所有方法
1.push() 和 pop() 栈的方法 后进先出 push() 该方法是向数组末尾添加一个或者多个元素,并返回新的长度. push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返 ...
- Hacker(17)----认识Windows系统漏洞
Windows系统是迄今为止使用频率最高的操作系统,虽然其安全性随着版本的更新不断提高,但由于人为编写的缘故始终存在漏洞和缺陷.但Mircosoft公司通过发布漏洞补丁来提高系统的安全性,使Windo ...
- java基础之String
字符串的含义 字符串的应用 字符串的方法
- Struts2上传文件
jsp: <form action="file_upload.action" method="post" enctype="multipart/ ...
- MVC5富文本编辑器CKEditor配置CKFinder
富文本编辑器CKEditor的使用 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- BULK INSERT如何将大量数据高效地导入SQL Server
转载自:http://database.51cto.com/art/201108/282631.htm BULK INSERT如何将大量数据高效地导入SQL Server 本文我们详细介绍了BULK ...
- oracle 自动添加序号列 排序
select HSL.sortno, HSL.B, HSL.A, row_n ...
- 在html页头设置不缓存
方法一:在<head>标签里增加如下meta标签. <meta http-equiv="Content-Type" content="text/html ...
- JS常用验证方法
1.验证必须为数字(可有小数点) if(isNaN(value))execCommand('undo') 说明:1.isNaN()方法用于验证value值是否为非法数字,返回值true或者false. ...
- jQuery input -> file change事件bug
由jQuery绑定类型为file的input控件的change事件,发现只能被触发一次,修改方法 --> 原始代码: $input.change(function() { // somethin ...