lichao@tarena.com.cn
4
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识.如果是用
hibernate 的 delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据
已被删除,该对象不再与数据库的记录关联.当一个 session 执行 close()或 clear()、
evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然
具有数据库识别值,但它已不在 HIbernate 持久层的管理之下.
Detached 游离(脱管)状态:po 和某个 Session 无关,数据库中有该记录
当与某持久对象关联的 session 被关闭后,该持久对象转变为脱管对象.当脱管对象被
重新关联到某个 session 上时,并再次转变成持久对象.脱管对象拥有数据库的识别值,
可通过 update()、saveOrUpdate()等方法,转变成持久对象.
Hibernate
HibernateHibernate
Hibernate 三种状态之间的转换关系
三种状态之间的转换关系三种状态之间的转换关系
三种状态之间的转换关系
new()
对象----------------> 临时状态 ---------------
saveOrUpdate() | + |
save() | | |
persit() | | |
merge() | | delete() |
createQuery() | | |
| | |
get() | | |
------------------>+ | +
| load() 持久化状态 垃圾回收
| list() | +
| uniqueResult() | |
| | |
| evict()| |update()
| close()| |saveOrUpdate()
| clear()| |lock(), merge()
| | |
| | |
| + |
|-------------------- 游离状态
注:
1、
persist():把一个瞬态的实例持久化,但是并"不保证"标识符被立刻填入到
持久化实例中,标识符的填入可能被推迟
到 flush 的时间。
2、 merge():
1.如果 idertifier(以下简称为 id)为空或不存在,则进行 insert 动作
2.如果 id 存在,则进行 update 动作