• dljd_(035-039)_对象的状态管理


    一、对象的状态

      hibernate中对象的状态
      对象的状态一般是指对象的一组属性的值。而在这里的状态是指对象处于什么存储介质中。
      用于存放对象的存储介质有三个:普通内存(与hibernate无关)、session缓存、数据库。
      对象处于不同的介质,就将处于不同的状态。
      1.1瞬时态:transient状态,对象在内存中存在,db中无记录,与session没关联。是个过渡状态。
      1.2游离态:detached状态,对象在内存中存在,db中有记录,与sess没关联。
      1.3无名态:在内存中不存在,db中有记录,与session没有关联
      1.4持久态:persisient对象在内存中存在,db中有记录,并且与session相关联(在session中有对象的副本)

    二、状态转换图

      

      执行new对象的时候、该对象加载到内存当中了、但是此时数据库中没记录、且与session没有关联、这种状态即对象的瞬时态。

      执行save、saveOrUpdate时将该对象保存到缓存(session)且同步到数据库中了、此时这种状态为:对象的持久态。

      执行evict(只删除缓存中的数据、数据不安全)、close、clear将与session断开联系、这就是对象的游离态。

      游离态的对象没有具体session去引用、经过垃圾回收器(garbage)回收、变为了无名态。如果对象在游离状态且执行了save()、saveOrUpdate()就又与特定session关联、这种状态又回到持久态。

      持久状态的对象执行delete()方法时、删除了缓存和数据库中的数据、此时只存在内存中、没有任何对象去引用、经过垃圾回收器回收。这就是一个对象从没到有、从有到没经过的步骤和状态。

     三、执行save方法前后对象的变化

      

      由此可知hibernate是通过主键来管理对象的。且普通内存与Session缓存中的对象是同一个对象的引用。所以save前后student是对同一个对象的引用。

     

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    SDN实验2:Mininet 实验——拓扑的命令脚本生成
    2020软工实践第一次作业
    POJ2942-Knights of the Round Table
    POJ1966 ZOJ2182<无向图点连通度 Isap版>
    POJ1523(求割点)
    POJ2391(最大流Isap+Floyd+二分)
    POJ1087 ZOJ1157(最大流Isap+map映射)
    POJ1459(最大流Isap)
    数字的字符串处理 (转)
    POJ2112 最大流(Isap+Floyd+二分)
  • 原文地址:https://www.cnblogs.com/aeon/p/10100226.html
Copyright © 2020-2023  润新知