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 ...
随机推荐
- webpack的配置及使用
webpack 安装 命令行输入 npm install webpack 配置文件 webpack.config.js moudule.exports = { //Import 入口文件 entry: ...
- 用SNMP协议实现系统信息监控--CentOS
(1) 安装SNMP客户端以及服务端 安装内容为三项:net-snmp net-snmp-devel net-snmp-utils 安装命令:yum install net-snmp net- ...
- [转载]C#开源项目(国外的还是很多)
C#开源项目(国外的还是很多)一.Ajax框架Ajax.NET Professional (AjaxPro)是最先把AJAX技术在微软.NET环境下的实现的AJAX框架之一.它在客户端脚本之上创建代理 ...
- Ajax:Cross-Origin Resource Sharing(转)
实例:http://blog.csdn.net/hongweigg/article/details/39054403 通过XHR实现Ajax通信的一个主要限制,来源于跨域安全策略.默认情况下,XHR对 ...
- (转)@@trancount解析
在处理事务的时候,一般都用RollBack Transaction来回滚,但是如果在嵌套事务中这样使用的话,就会出现错误. 在SqlServer里,嵌套事务的层次是由@@TranCount全局变量反映 ...
- MessageDigest 类
MessageDigest 类 MessageDigest 类是一个引擎类,它是为了提供诸如 SHA1 或 MD5 等密码上安全的报文摘要功能而设计的.密码上安全的报文摘要可接受任意大小的输入( ...
- 介绍 Visifire 常用属性的设置
转载自http://www.cnblogs.com/xinyus/p/3422198.html 主要介绍 Visifire 常用属性的设置,用来生成不同样式的图例 设置Chart的属 //设置titl ...
- 错误记录--更改tomcat端口号方法,Several ports (8005, 8080, 8009)
启动Tomcat服务器报错: Several ports (8005, 8080, 8009) required by Tomcat v5.5 Server at localhost are alre ...
- Python爬虫——抓取糗百段子
在别人博客里学习的 抓取糗百段子,由于糗百不断的更新,代码需要改正. 抓取网页:http://www.qiushibaike.com/hot/page/1 修改后的代码如下: # -*- coding ...
- 洛谷 P1066 2^k进制数
P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...