Hibernate - 持久化对象的状态

  • 临时对象(Transient):使用new操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说,它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其他对象所引用),它们的状态将会丢失,并由垃圾回收机制回收

    –      在使用代理主键的情况下, OID 通常为 null

    –      不处于 Session 的缓存中

    –      在数据库中没有对应的记录

  • 持久化对象(也叫”托管”)(Persist):持久化实例是任何具有数据库标识的实例。它有持久化管理器Session统一管理,持久化实例是在事务中进行操作的——它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行SQL的insert、update和delete语句把内存中的状态同步到数据库中

    –      OID 不为 null

    –      位于 Session 缓存中

    –      若在数据库中已经有和其对应的记录, 持久化对象和数据库中的相关记录对应

    –      Session 在 flush 缓存时, 会根据持久化对象的属性变化, 来同步更新数据库

    –      在同一个 Session 实例的缓存中, 数据库表中的每条记录只对应唯一的持久化对象

  • 游离对象(也叫”脱管”) (Detached):Session关闭之后,持久化对象就变成离线对象。离线表示这个对象不能再与数据库保持同步,它们不再受Hibernate管理。

    –      OID 不为 null

    –      不再处于 Session 缓存中

    –      一般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录

  • 删除对象(Removed)

    –      在数据库中没有和其 OID 对应的记录

    –      不再处于 Session 缓存中

    –      一般情况下, 应用程序不该再使用被删除的对象

 

 

posted on 2018-04-06 14:34  pjlhf  阅读(127)  评论(0编辑  收藏  举报

导航