第四章 Hibernate中的持久化对象的生命周期

4.1提供对象状态管理的目的 
    使开发者不再需要理会底层数据库系统的细节 
    使用Hibernate的开发者应该总是关注对象的状态(state),不必考虑SQL语句的执行

4.2 Hibernate 仅仅定义了三种状态:瞬时(临时)、持久和脱管(游离),对客户端代码隐藏了其内部实现的复杂性
4.2.1 瞬时对象(Transient Object):Hibernate中的持久化对象的生命周期
        使用new操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收
4.2.2持久化对象(Persistent Object):
        持久实例是任何具有数据库标识的实例,它有持久化管理器Session统一管理,持久实例是在事务中进行操作的----它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL的INSERT、UPDATE和DELETE语句把内存中的状态同步到数据库中。
4.2.3游离对象(Detached Object):
    Session关闭之后,持久化对象就变为游离对象。游离表示这个对象不能再与数据库保持同步,它们不再受hibernate管理。

4.3三种状态相互转换的说明

4.4总结:
       Transient对象:随时可能被垃圾回收器回收(在数据库中没有于之对应的记录,应为是new初始化),而执行save()方法后,就变为Persistent对象(持久性对象)。没有纳入session的管理。内存中一个对象,没有ID,缓存中也没有。
        Persistent对象:在数据库有存在的对应的记录,纳入session管理。在清理缓存(脏数据检查)的时候,会和数据库同步。内存中有、缓存中有、数据库有(ID)。
        Detached对象:也可能被垃圾回收器回收掉(数据库中存在对应的记录,只是没有任何对象引用它是指session引用),注引状态经过Persistent状态,没有纳入session的管理。

时间: 2024-12-03 02:00:19

第四章 Hibernate中的持久化对象的生命周期的相关文章

浅谈C++应用程序中创建持久化对象

持久化的对象,是已经存储到数据库或保存到本地硬盘中的对象,我们称之为持久化对象.下面介绍C++中的持久化对象. 持久对象(persistent objects)广泛应用于游戏.分布式数据库系统.多媒体以及图形应用程序中.目前C++并不直接支持持久性(persistence)(但有一些在C++未来版本中添加持久性和反射(reflection)的建议). 持久对象可以在创建它的程序的作用域之外保持自身状态.把对象写入一个文件并在以后重建之,或者把对象传送到一台远程机器,就是这样的例子.对持久性的支持

Javascript基础与面向对象基础~第四讲 Javascript中的类对象

今天来说JS中如何实现类(class),事实上本应该昨天晚上写的,可我失言了,在些说一声"抱歉"!JS中的类是JS面向对象的基础,也是我最拿手的东西,你写的代码能否提高一个层次,一般是从这点上看出来的. 占占对类的定义: 类是对现实中的事物的抽象,一个类一般由属性和方法构成,属性是一些固定的信息,而方法是类的某种行为,类往往用来抽象一些复杂的对象,类与类这间可以进行继承,一般通过JS的function实现,JS中的类对象是实现JS面向对象的基础. 占占对结构体的定义: 一个结构体也是对

我所理解的Remoting (2) :远程对象的生命周期管理[下篇]

在上一篇文章中([原创]我所理解的Remoting(2):远程对象生命周期的管理-Part I),我简要的讲述了CLR的垃圾回收机制和Remoting 基于Lease的对象生命周期的管理.在这篇文章中,我们将以此为基础,继续我们的话题.在文章的开始,我将以我的理解详细地讲述Remoting中两个重要的概念--Lease和Sponsorship.然后我通过一个Sample,为大家演示如何以不同的方法延长远程对象的生命周期. 我们先不谈远程对象.本地对象. 不管是远程的对象,还是本地对象,都对于程序

浅谈Android App开发中Fragment的创建与生命周期_Android

Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment.你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除. Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响.例如:当activity暂停时

浅谈Android App开发中Fragment的创建与生命周期

Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment.你可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除. Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响.例如:当activity暂停时

Java对象的生命周期与作用域的讨论(转)

导读: Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除.因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3.其中T1表示对象的创建时间,T2表示对象的使用时间,而T3则表示其清除时间.由此,我们可以看出,只有T2是真正有效的时间,而T1.T3则是对象本身的开销.下面再看看T1.T3在对象的整个生命周期中所占的比例. 我们知道,Java对象是通过构造函数来创建的,在这一过程中,该构造函数链中的所有构造函数也都会被自动调用.另外,默认情况下,调用

c++-C++函数返回的临时匿名对象的生命周期

问题描述 C++函数返回的临时匿名对象的生命周期 C++函数返回的临时匿名对象什么时候被释放内存 #include using namespace std; class A { public: int x; A(int a){cout<<"creating"<<endl;x=a;} A(const A& a){cout<<"copy"<<endl;x=a.x;} void operator=(A& a)

C++临时性对象的生命周期详细解析_C 语言

有关临时对象的生命周期有三种情况: 1)一般情况:临时性对象的被摧毁,应该是对完整表达式(full-expression)求值过程中的最后一个步骤.该完整表达式造成临时对象的产生. 实例代码如下: 复制代码 代码如下: #include <iostream>using namespace std;class A{public:    A(int i): m_i(i)    {        cout << "A(): " << m_i <<

Hibernate实体对象的生命周期(三种状态详解)

Hibernate生命周期会经历三种不同的状态:     1.Transient(瞬态):实体对象在内存是自由存在的,即与数据库中的数据没有任何关系.换句话说就是:该实体从未与任何持久化上下文关联过,它没有持久化标识.例如:          //创建一个Transient对象  User user=new User(); user.setName("username");  user.setPassword("password");  //此时的user为一个Tr