zoukankan      html  css  js  c++  java
  • 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 || 点返回首页

  • 相关阅读:
    leveldb的搜索
    分布式存储bfs
    golang channel的行为
    支持rotate和大小限制的golang log库
    后台架构 一些需要注意的地方
    不要滥用面向对象,写出难以阅读和修改的代码
    goloader
    逻辑引擎、工作流、CMDB小感
    HTML5学习笔记4
    HTML5学习笔记3
  • 原文地址:https://www.cnblogs.com/aeon/p/10100226.html
Copyright © 2011-2022 走看看