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对象的状态的更多相关文章

  1. Hibernate框架--对象的状态,缓存, 映射

    回顾Hibernate第二天: 1.  一对多与多对一 2. 多对多 3. inverse/cascade 4. 关联关系的维护 一对多: <set name="映射的集合属性&quo ...

  2. Hibernate持久化对象的状态

    1. 站在持久化的角度 , Hibernate 把对象分为 4 种状态 : 持久化状态, 暂时状态, 游离状态(脱管状态) , 删除状态.Session 的特定方法能使对象从一个状态转换到还有一个状态 ...

  3. Hibernate 持久化对象的状态

    持久化对象有3种状态:1.持久化状态      2.临时状态      3.游离状态 Session 的特定方法能使对象从一个状态转换到另一个状态临时对象(transient)•    在使用代理主键 ...

  4. 1.1Hibernate持久化类和Hibernate持久化对象状态

    一.持久化对象po类 1.po定义 PO,是Persistent Object的缩写,是持久化类.PO是由PO=POJO+hbm映射配置组成. 2.通俗理解 PO类即持久化类,其实就是一个普通的Jav ...

  5. hibernate映射对象三种状态的分析

    一,首先hibernate中对象的状态有 三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate(). get().lo ...

  6. Hibernate之对象的三种状态

    Hibernate之Java对象的三种状态 一.简述 本博文大部分的思想和内容引子CSND上名为 FG2006 这位大神的文章,连接地址为:http://blog.csdn.net/fg2006/ar ...

  7. 我对hibernate的对象的3种状态的理解

    老师的说法 Hibernate中对象的状态    在Hibernate使用中,对象的状态有以下三种    a.临时对象 : 在程序中使用new方式创建的对象    b.持久对象 : 在程序中与sess ...

  8. Hibernate中的对象状态,及自动更新原因,Hibernate set对象后不调用update却自动更新

    原文:http://www.cnblogs.com/xiaoda/p/3225617.html Hibernate的对象有三种状态,分别为:瞬时状态 (Transient). 持久化状态(Persis ...

  9. 关于hibernate中对象的三种状态分析

    一,首先hibernate中对象的状态有三种:瞬态.游离态和持久态,三种状态转化的方法都是通过session来调用,瞬态到持久态的方法有save().saveOrUpdate().get().load ...

随机推荐

  1. Android 高仿微信头像截取 打造不一样的自定义控件

    转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/39761281,本文出自:[张鸿洋的博客] 1.概述 前面已经写了关于检测手势识别 ...

  2. gulp 构建工具

    1. gulp 的简介 gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以 ...

  3. 多种下载文件方式 Response.BinaryWrite(byte[] DocContent);Response.WriteFile(System.IO.FileInfo DownloadFile .FullName);Response.Write(string html2Excel);

    通过html给xls赋值,并下载xls文件 一.this.Response.Write(sw.ToString());System.IO.StringWriter sw = new System.IO ...

  4. OpenGL ES 2.0 光照

    基本的光照 光照分成了3种组成元素(3个通道):环境光.散射光以及镜面光. 材质的反射系数实际指的就是物体被照射处的颜色,散射光强度指的是散射光中的RGB(红.绿.蓝)3个色彩通道的强度. 环境光 指 ...

  5. Map基本用法

    Map的基本用法 map内部使用的是红黑树,在map内部所有的数据都是有序的 map插入有三种方法: insert(pair<int,string>(i,str)); myMap.inse ...

  6. pubwin 客户端会员无法自助结账的排查方法

    客户端会员无法自助结账按以下方法排查:1,看客户端能不能打开web https 后台,打不开的话,在服务端打上2048证书补丁(按下面帖子操作)http://bbs.pubwin.com.cn/for ...

  7. #Java编程题-百钱百鸡

    问题: 百钱百鸡问题.用100钱买100只鸡,公鸡一只五钱,母鸡一只三钱,雏鸡三只一钱,编程计算共有几种买法(要求每种鸡至少要买1只). 自己的实现,没有什么数据结构,算法,求大神指点!! packa ...

  8. Android开源库

    http://blog.csdn.net/xiaanming/article/details/9470223 一.兼容类库 ActionBarSherlock : Action Bar是Android ...

  9. Codeforces 463D Gargari and Permutations

    http://codeforces.com/problemset/problem/463/D 题意:给出k个排列,问这k个排列的最长公共子序列的长度. 思路:只考虑其中一个的dp:f[i]=max(f ...

  10. BZOJ 1560 火星藏宝图(DP)

    思路:发现如果从A能到B,B能到C,那么一定A能到C,且根据不等式:A^2+B^2<=(A+B)^2,而且权值没有负数,因此经过B比不经过B要优,因此,我们从左上到右下做,每一列,我们只记录之前 ...