return to homepage.

three ways contact with meemail: contact with me using emailmsn: contact with me using msnQQ: contact with me using QQ

欢迎自由转载,但请注明本blog链接,谢谢合作。

文章分类

成长,转载 (1) 地税 (1) 健康 (2) 趣闻 (1) 生活杂记 (11) 转载 (4) CSS (1) Design Patterns (1) DWR (3) EJB (1) Hibernate (2) javascript (2) Jsp (2) NBA (1) Oracle (2) Struts (4) Tomcat (1) Weblogic (1) XML (1)

2007年3月31日星期六

Hibernate的对象三态以及cascade

对于需要被持久化的Java对象,在它的生命周期中,可处于三种状态:
1.临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session缓存中
特征:不处于Session的缓存中,也可以说,不被任何一个Session实例关联
在数据库中没有对应的记录

2.持久化状态(persistent):已经被持久化,加入到Session的缓存中
特征:位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联
与数据库中的相关记录对应
Session在清理缓存时,会根据持久化对象的属性变化来同步更新数据库

3.游离状态(detached):已经被持久化,但不再处于Session的缓存中
特征:不处于Session的缓存中,也可以说,不被任何一个Session实例关联
游离对象是由持久化对象转变过来的,因此在数据库中有可能还存在与它对应的记录(如果没有其它程序删除了那条记录)

关于cascade属性
none:在保存、更新或删除当前对象时,忽略其他关联的对象。它是cascade属性的默认值
save-update:当通过Session的save()、update以及saveOrUpdate()方法来保存或更新当前对象时,级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象
delete:当通过Session的delete()方法删除当前对象时,级联删除所有关联的对象
all:包含save-update以及delete的行为。此外,对当前对象执行evict()或lock()操作时,也会对所有关联的持久化对象执行evict()或lock()操作
delete-orphan:删除所有和当前对象解除关联关系的对象
all-delete-orphan:包含all和delete-orphan的行为

0 评论: