zoukankan      html  css  js  c++  java
  • Hibernate中实体对象的状态

      实体对象的状态

      这里的实体对象是指Hibernate的O/R映射关系中的域对象(即O/R中的O)。实体对象的生命周期是指实体对象由产生到被GC回收的一段过程,实体对象的生命周期包括3种状态:自由状态(Transient),持久状态(Persistent)和游离状态(Detached)。

      1.自由状态

      自由状态是指实体对象在内存中自由存在,但此时它与数据库无关。主要有一下两个特征:

      >> 不处于Session的缓存中,也就是不被任何一个Session关联。

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

      2.持久状态

      持久状态是指实体对象处于Hibernate的管理情况下的状态。在持久状态下,实体对象的引用被纳入Hibernate实体容器中加以管理。处于此状态的实体对象,会被Hibernate固化到数据库中。总之,如果一个实体对象与某个Session实例发生了关联,并且处于这个Session的有效期内,那么它就处于持久状态。处于持久状态的实体对象具有以下特征:

      >> 位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联。

      >> 持久化对象和数据库中的相关记录对应。

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

      >> Session的save()方法把实体对象从自由状态转变为持久状态。

      >> Session的load()方法或get()方法返回的实体对象总是处于持久状态。

      >> Session的update(),saveOrUpdate()和lock()方法使实体对象从游离状态转变为持久状态。

      3.游离状态

      当处于持久状态的实体对象,其对应的Session关闭后,这个实体对象就处于了游离状态。也可以认为Session对象是实体对象在持久状态的宿主,而实体对象失去了这个宿主,也就是这个宿主失效,那么这个实体对象就进入了游离状态。处于游离状态的实体对象有如下特征:

      >> 不再位于Session的缓存中,也可以说游离状态的实体对象不被Session关联。

      >> 游离状态是由持久化对象转变来的,因此在数据库中可能还存在与它对应的记录。

  • 相关阅读:
    MySQL难点语法——连接
    MySQL难点语法——子查询
    MySQL查询——select
    python高级编程——入门语法(二)
    python高级编程——入门语法(一)
    MySQL语言分类——DML
    python高级编程——锁
    浮点数的秘密
    有符号和无符号数
    基本数据类型
  • 原文地址:https://www.cnblogs.com/leny/p/4802375.html
Copyright © 2011-2022 走看看