hibernate之实体对象生命周期

在Hibernate的应用中,实体对象的生命周期,是一个关键的概念,这里的实体对象指的是Hibernate O/R映射关系中的域对象(即O/R中的“O”);

实体对象的三种状态:

  • 自由状态(Transient)

所谓的Transient,即实体对象在内存中的自由存在,它与数据库无关 ;如:

			TUser user = new TUser();;
			user.setName("keith ");
			user.setAge(new Integer(18));
			user.setInfo("the stu No is:");

 此时的user对象,只是在内存中存在,并没有和数据库想关联;

  • 持久状态(Persistent)

所谓的Persistent,即实体对象在hibernate管理的状态下,在这种状态下,实体对象的引用被纳入hibernate实体容器中加以管理;处于Persistent状态的对象,会由hibernate固化到数据库中;如:

session.save(user);
session.getTransaction().commit();

 当session调用save()时,已经将user这个对象纳入hibernate的管理,当session获取transaction并提交时,就将这个对象固化到了数据库中;

当我们需要将某一条数据调出时,可以这样:

session.load(TUser.class, new Integer(1));
session.getTransaction().commit();

 当session.load()时(也就是一个实体对象由Hibernate加载),那么此时它也是处于persistent状态;简单的说:如果一个实体对象与某个session实例发生了关联,并处于这个session的有效期内,那么它就处于persistent状态;

  • 游离状态(Detached)

当一个对象处于某个session的实例范围之外,那么这个对象就处于游离状态!(处于persistent状态下的对象,其对应的session实例关闭之后,那么此对象就处于Detached状态 );如:

		session.close();
		//此时的对象已经处于游离(Detached)状态

 也可以这么看,Session实例是Persistent状态下对象的宿主,宿主消失了,其对象就没有什么可依靠的了,就成为游离状态(Detached);

 

那么,Detached状态和Persistent状态有什么区别呢?

区别在于处于Detached状态下的对象可以再找一个宿主(与某个session实例对象想关联,而成为persistent对象),也就会再次变成Persistent状态,而处于Persistent状态下的对象,如果其宿主还在,那么它就没有必要再重新去找一个新的宿主;

 

一个对象会由Transient--->Persisent--->Detached;那么这个过程中处于Detached状态的user和处于Transient状态的user有什么变化?既然一个Detached对象与hibernate容器无关了,那么两者之间还有什么差异?

再回顾下代码:

			//创建了Transisent状态的user对象
                        TUser user = new TUser();
			user.setName("keith ");
			user.setAge(new Integer(18));
			user.setInfo("the stu No is");
                        //借助save()方法,将其转变为persisent状态
			session.save(user);

 关键在于,在session.save()方法执行过程中,User对象的内容已经发生了改变,当user对象处于Transisent状态下时,我们为它设定了一些属性,此时这个user对象所包含的数据信息也仅限于此,它于数据库中的记录没有任何对应关系;而当执行save()方法之后,Hibernate对user对象进行了持久化,并为其赋予了其相应的值,这个时候user对象自然就与数据库中的记录相对应了!

 

这就是前后两个状态user对象之间的基本差异:Transisent状态的user对象与数据中的数据缺乏对应关系,而Detached状态的对象,与库表中存在想对应的记录,但是Detached对象脱离了session这个数据管理平台,其状态的变化无法更新到数据库中;

 

VO与PO :

为了方便,将处于Transisent状态和Detached状态下的对象称为值对象,即VO(Value Object);将处于Persisent状态的对象称为持久对象,即PO(Persisent Object);这是站在“实体对象是否被纳入hibernate管理容器”的立场上区分,非管理的实体对象成为VO,被管理的对象成为PO;

VO与PO的区别:

1,VO是相对独立的对象,处于非管理状态;

2,PO是hibernate纳入其管理容器的对象,代表与数据库中某条记录的hibernate实体,PO的变化是在事务提交时将反映到实际数据库中;

3,如果一个PO与其对应的session实例分离,那么此时就会变成一个VO;

 

后向投影算法(BPA)-SAR成像算法系列(二) SAR成像算法:后向投影算法(BPA)原理介绍及实现步骤解析。 阅读详情

相关推荐

别再手动翻译PDF了!手把手教你用Zotero PDF Translate插件搞定外文文献(附最新GitHub下载链接)

本文详细介绍如何利用Zotero PDF Translate插件高效翻译外文文献,包括插件安装、配置及多引擎对比。通过划词翻译、段落翻译和全文翻译功能,显著提升科研工作效率,特别适合处理大量英文PDF文献的研究人员。

weixin_33712987的博客 772

ORM框架Hibernate (二) 持久化对象的三种状态分析

引入 在解压Hibernate有好几十兆就感觉这比Struts大多了,应该比Struts要深奥一些果然是这样,不过如果你看了这篇文章,你也会理解的。 这里先不说对象的状态,本来对象挺简单的Hibernate又把对象分了三种状态,初次让人看了有点头晕的感觉怎么这么复杂? 通过看了一些资料体会是不应该先理解各种状态以及他们的用法,而应该先重点理解一下Hibernate里面的sess...

897371388 246

【chips】个人笔记系列-SystemVerilog

个人整理的Systemverilog笔记。

Hide_in_Code 2059

【SSH】Hibernate:O/R实体映射与一对一关联

实体映射 O/R映射是ORM框架中最为关键的组成部分了。其中的实体映射介绍hibernate中类和表之间的映射属性字段的基本技术   问题:数据库中有一个表【T_User】,其中字段有【ID】、【name】,那么如何在hibernate中建立一个对应的映射呢? Hibernate 选用xml 作为类表映射配置媒介(默认为.hbm.xml后缀),通过xml可以将表T_User 映射到hibe

一支穿云箭 1995

Haclon案例-找出图中面积最大的圆

自带的函数,求得圆的面积和圆心点坐标,然后,用本章所学习的选择算子和循环算子找出面积最大的圆。的图片,试着给它加上不同种类的噪声,然后找出其中面积最大的圆,并将圆的面积标注在其圆心位置。可知,除了六个圆形之外,还有一些微小的噪声点,采用了开运算和特征选择的方法去除噪声。1. 该图片为一灰度图,对其进行二值化,二值化后如图。4. 在面积最大圆的圆心坐标位置写上该圆的面积。

qq_20660115的博客 903

LEAP模型—低排放分析平台

LEAP 正在迅速成为进行综合资源规划、温室气体 (GHG) 缓解评估和低排放发展战略 (LEDS) 的国家的事实标准,尤其是在发展中国家,许多国家也选择使用 LEAP 作为其承诺的一部分向联合国气候变化框架公约(UNFCCC)报告。至少有 32 个国家使用 LEAP 来创建能源和排放情景,这些情景是其国家自主气候变化贡献计划 (INDC) 的基础:具有历史意义的巴黎气候协议的基础旨在表明各国开始经济脱碳的意图和投资于气候适应力。

weixin_54697010的博客 3280

Hibernate--对象生命周期及状态--Session

这里写自定义目录标题

a1773570500的博客 982

电流模架构Bandgap设计与仿真

带隙基准作为集成电路中一个重要模块,被广泛应用在低压差线性稳压(LDO)、充电电池保护芯片和通信电路、射频收发器、flash存储器等多种模拟及数模混合集成电路中,并且是片上集成系统(SOC)芯片中不可或缺的部分,为整个芯片提供精确的电压参考点............

qq_50968231的博客 5万+

Hibernate O/R映射三大基本定则

转贴自/:http://www.yourblog.org/Data/20044/34092.html                      发表:2004-4-2 10:40:43  出处:你的博客网(yourblog.org)1. 引言 在Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一种新的O/R映射工具,它不仅提供了从Ja

yq76034150的专栏 4513

Unity最强动作战斗框架?Combat System Framework 深度解析

Combat System Framework 并不是一个简单的角色控制器,而是一套完整的动作游戏战斗开发框架。它借鉴了现代 AAA 游戏常见的架构思想,以 Gameplay Tag 为核心,结合 ScriptableObject 数据驱动设计,将技能、属性、Buff、伤害、武器、动画通知等系统有机整合在一起。同时,配套的可视化动画时间轴、Root Motion 工具和实时预览窗口,大幅优化了动作开发流程。当然,这套框架也有一定的学习门槛。

2403_88403568的博客 681

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

XiaoqiangClub的博客 1万+

Hibernate中实体对象的生命周期

实体对象的生命周期在Hibernate应用中是一个很关键的概念,正确的理解实体对象的生命周期将对我们应用Hibernate做持久层设计起到很大的作用.而所谓的实体对象的生命周期就是指实体对象由产生到被GC回收的一段过程.在这过程中我们需要理解的就是实体对象生命周期中的三种状态。 1.自由状态(Transient) 所谓的Transient状态,即实体对象在内存中自由存在,与数据库中的记录无关,

HQingmu 青木河 587

YOLOv11改进 - 卷积Conv | PConv(Pinwheel-shaped Conv): 风车状卷积用于红外小目标检测 | AAAI 2025

本文介绍了风车状卷积(PConv)和基于尺度的动态(SD)损失在YOLOv11中的结合应用。PConv采用不对称填充,通过特殊结构设计、卷积运算和分组卷积技术,能更好地适应红外小目标的像素高斯空间分布,在少量增加参数的情况下极大扩展感受野。SD损失可根据目标大小动态调整尺度和位置损失的影响。我们将PConv集成到YOLOv11的主干网络低层,并在相关配置文件中进行设置。实验证明,YOLOv11 - PConv在IRSTD - 1K和SIRST - UAVB数据集上取得显著性能提升,验证了方法的有效性和泛化能

魔改工程师的博客 1334

hibernate 实体对象的生命周期

hibernate 实体对象的生命周期主要分为三个状态,Transient(瞬态),Persistent(持久态),Detached(游离态)。     1.Transient(瞬态) 表示该实体对象在内存中是自由的,也就是说和数据库没有任何关系。      //创建一个瞬态对象      User user = new User();      user.setName(userName

da6679980的专栏 606

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Hibernate实体对象生命周期内的三种状态

刚开始接触Hibernate的时候,只是简单的把它当做一个API工具,直到后来看到有关VO和PO的内容时,才意识到Hibernate不仅仅是一个O/R Mapping的API工具,它还是一个容器。它可以帮你管理实体对象的生命周期。      实体对象的生命周期有三种状态:    1.Transient(自由状态)    此时的实体对象和数据库中的记录无关联,只是一个普通的Jav

wzwjr的专栏 3163

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Hibernate实体对象的生命周期

实体对象的生命周期中主要存在三种不同的状态,它们分别是Transient(瞬态)、Persistent(持久态)、Detached(游离态)。一个实体对象的实体通过不同的操作可以在这三种状态之间转换。 1、Transient(瞬态) 所谓瞬态,表示该实体对象在内存中是自由存在的,也就是与数据库中的数据没有任何关系。 下面来看一段代码: //创建一个瞬态对

Cynthia9023的专栏 1052

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hibernate的实体对象生命周期

实体对象的生命周期在Hibernate应用中是一个很关键的概念,正确的理解实体对象的生命周期将对我们应用Hibernate做持久层设计起到很大的作用.而所谓的实体对象的生命周期就是指实体对象由产生到被GC回收的一段过程.在这过程中我们需要理解的就是实体对象生命周期中的三种状态. 1. 自由状态(Transient) 所谓的Transient状态,即实体对象在内存中自由存在,与数据库中的记录

waj89757的专栏 970

hibernate中实体domain对象的生命周期

hibernate的生命周期   (2011-09-09 12:54:05) 转载▼     实体对象的生命周期在Hibernate应用中是一个很关键的概念,正确的理解实体对象的生命周期将对我们应用Hibernate做持久层设计起到很大的作用.而所谓的实体对象的生命周期就是指实体对象由产生到被GC回收的一段过程.在

Mr_HHH的博客 1194

《深入浅出Hibernate》读书笔记(1)——实体对象生命周期

      最近正在研读《深入浅出Hibernate》一书,前面写的随笔有些也是读该书的笔记,只是未做归类,从这篇开始,我将把相关的内容都整理成一个系列的读书笔记。      今天这篇是有关实体对象的生命周期。我刚开始接触Hibernate的时候,只是简单的把它当做一个API工具,直到后来看到有关VO和PO的内容时,才意识到Hibernate不仅仅是一个O/R Mapping的API工具,它还

derpvailzhangfan的专栏 1028

Hibernate之实体对象的生命周期

在Hibernate中实体对象有三种状态:1。Transient      暂存对象,指被创建出来但没有save()的对象的状态。2。Persistent     对象与数据库中的数据有对应关系,并且与Session实例有关联而Session实例还没关闭时,对象的状态。     如何将Session实例关闭,则对象会由Persistent状态转换成Detached状态。  

小码哥的专栏 502

Hibernate-1.实体对象生命周期

 Hibernate中,实体对象生命周期分为三种状态:Transient(瞬态)、Persistent(持久态)、Detached(游离态),下面把三种状态的概念说一下。Transient(瞬态):即普通的实体对象,没有与数据库产生任何关联,比如UserInfo userInfo = new UserInfo();这个userInfo对象就是Transient。Persistent(持久态

vinep的专栏 2677
上一篇: Hibernate之数据加载方式
下一篇: hibernate之脏数据检查
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值