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是对同一个对象的引用。

 

猜你喜欢

转载自www.cnblogs.com/aeon/p/10100226.html