首页 > 代码库 > Hibernate中对象的三个状态解析

Hibernate中对象的三个状态解析

Hibernate 将操作的对象分为三种状态:

1.

瞬时 (Transient )/临时状态/自由状态 

持久 (Persistent)

脱管 (Detached)

 

瞬时对象特征:

  第一、不处于 Session 的缓存中,也可以说,不被任何一个 Session 实例关联。

  第二、在数据库中没有对应的记录。

持久化对象特征:

  第一、持久化对象总是被一个 session 关联。

  第二、持久化对象与数据库中的记录对应。

  第三、Session清理缓存的时候,会根据持久化对象的改变,更新数据库。

托管对象特征:

  第一、Session断开关联

  第二、持有OID

 

2.三种状态的区别分析:

  只要与session关联的就是持久态。

  Session没关联,没有OID就是瞬时状态。

  Session没关联,有OID的就是游离状态。

 

3.持久化对象状态的相互转换:

转换图:

 

技术分享

瞬时对象:

         如何直接获得  --- new 出来

         转换到持久态 ---- save、saveOrUpdate 保存操作

         转换到脱管态 ---- setId 设置OID持久化标识(这个id是数据库中存在的)

持久对象:

   如何直接获得 ---- 通过session查询方法获得 get、load、createQuery、createCriteria

         转换到瞬时态 ---- delete 删除操作 (数据表不存在对应记录 )(其实还有id,只是不叫OID)

         转换到脱管态 ---- close 关闭Session, evict、clear 从Session清除对象

脱管对象:

   如何直接获得 ----- 无法直接获得 ,必须通过瞬时对象、持久对象转换获得

         转换到瞬时态 ---- 将id设置为 null,或者手动将数据库的对应的数据删掉

         转换到持久态 ---- update、saveOrUpdate、lock (对象重新放入Session ,重新与session关联)

在Hibernate所有的操作只认OID,如果两个对象的OID一直,它就直接认为是同一个对象。

 

Hibernate中对象的三个状态解析