首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate3.2(3)Hibernate 对象的生命周期

2012-11-09 
Hibernate3.2(三)Hibernate 对象的生命周期Hibernate 持久化对象的生命周期(lifecycle):1. transient Obje

Hibernate3.2(三)Hibernate 对象的生命周期

Hibernate 持久化对象的生命周期(lifecycle):

1. transient Objects(瞬时对象)

??? 使用new操作符初始化的对象不是立即就持久的。他们的状态时瞬时的,也就是说它们没有任何跟数据库表相关联的

??? 行为。只要应用不再引用这些对象(不再被任何其他对象所引用),他们的状态就会丢失,并由垃圾回收机制回收。

2. Persistent Objects(持久对象):

??? 是任何就有数据库标识的实例。它由持久化管理器Session统一管理,持久化实例是在事务中操作的——它们的状态在

??? 事务结束时同数据库同步。当事务提交时,通过执行SQL的insert、update、delete语句把内存中的状态同步到数据

??? 库。

3. Detached Objects(离线对象):

??? Session关闭之后,持久化对象就变为离线对象。离线对象表示这个对象不能再与数据库保持同步,他们不再

??? 受Hibernate管理。

?

Hibernate3.2(3)Hibernate 对象的生命周期

注意:

?

瞬时对象和离线对象的主要区别是离线对象在数据库中有对应记录(有没有这条记录是看主键来判断的)。主要共同点是transient 对象和detached 对象都可以被垃圾回收机制回收,因为它们没有被session管理,瞬时对象和离线(又称脱管)对象也称为VO(Value?Object)。
transient 执行了save()就变成了persistent状态,持久的对象执行了session.close() or clear() 等,就变成了离线状态,session没有管理它,可以被垃圾回收。因为数据库中还存在与离线对象对应的记录,所以可以执行update(),重新把detached 对象变为persistent对象,又放入了session的缓存中了,又被session管理了。

persistent对象在数据库中有对应记录,也纳入了session 的管理。当执行delete(),状态变成了transient ,数据库中已经没有与之对应的对象,也没被session管理,可以被垃圾回收。新new出来的对象也是transient的。

?

瞬时态由new命令开辟内存空间的java对象,eg.?Person?person?=?new?Person("xxx",?"xx");如果没有变量对该对象进行引用,它将被java虚拟机回收。瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或?saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
???? 持久态处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识。如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,?因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有?数据库识别值,但它已不在HIbernate持久层的管理之下。

?

持久对象总是与 Session 和 Transaction 相关联,在一个 Session 中,对持久对象的改变不会马上对数据库进行变更,而必须在 Transaction 终止,也就是执行 commit() 之后,才在数据库中真正运行 SQL 进行变更,持久对象的状态才会与数据库进行同步。在同步之前的持久对象称为脏 (dirty) 对象。

?

详细的配图说明:

http://fehly.iteye.com/blog/619825

http://www.iteye.com/topic/859826

?

?

热点排行