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 || 点返回首页

  • 相关阅读:
    ASP.NET中常用的优化性能的方法
    把WinDbg集成到Visual Studio中
    提高ASP.net的性能
    Msn Library
    [转帖]OutOfMemoryException问题的处理
    一完美的关于请求的目录不存在而需要url重写的解决方案!
    在 ASP.NET 中执行 URL 重写
    转 内存不断上升处理方法
    IIS 6 通配符应用映射和HttpHandler配置
    Java开源
  • 原文地址:https://www.cnblogs.com/aeon/p/10100226.html
Copyright © 2011-2022 走看看