现在的位置: 首页 > 综合 > 正文

Hibernate实体对象生命周期内的三种状态

2013年06月10日 ⁄ 综合 ⁄ 共 2309字 ⁄ 字号 评论关闭
  1. 刚开始接触Hibernate的时候,只是简单的把它当做一个API工具,直到后来看到有关VO和PO的内容时,才意识到Hibernate不仅仅是一个O/R Mapping的API工具,它还是一个容器。它可以帮你管理实体对象的生命周期。   
  2.   
  3.  实体对象的生命周期有三种状态:   
  4.  1.Transient(自由状态)   
  5.  此时的实体对象和数据库中的记录无关联,只是一个普通的JavaBean。   
  6.  2.Persistent(持久状态)   
  7.  此时的实体对象和数据库中的记录有关联,其变更将由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所管理的状态。   
  8.  3.Detached(游离状态)   
  9.  处于Persistent状态的对象,其对应的Session实例关闭之后,那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象。   
  10.   
  11.  从实体对象是否被纳入Hibernate实体管理容器的角度,Transient和Detached状态的实体对象可以统称为VO(Value Object),而被管理的实体对象称为PO(Persistent Object)。两者的区别:   
  12.  1.VO是相对独立的实体对象,处于非管理状态。   
  13.  2.PO是Hibernate纳入其实体管理容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反映到实际数据库中。   
  14.  3.如果一个PO与其对应的Session实例分离,那么此时,它又会变成一个VO。  

 

        Hibernate的对象有3种状态,    分别为:

             瞬时态(Transient)、

             持久态(Persistent)、

             脱管态(Detached).

         处于持久态的对象也称为PO(PersistenceObject),瞬时对象和脱管对象也称为VO(ValueObject).   

  

  1. 瞬时态   
  2. new命令开辟内存空间的java对象,   
  3.   
  4. eg.Person person=new Person("xiaoxiao","女");   
  5. 如果没有变量对该对象进行引用,它将被java虚拟机回收.   
  6.   
  7. 瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象.   
  8.   
  9. 持久态   
  10. 处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识.如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联.   
  11.   
  12. 当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下.   
  13.   
  14. 持久对象具有如下特点:   
  15.   
  16. 1.和session实例关联;   
  17.   
  18. 2.在数据库中有与之关联的记录.   
  19.   
  20. 脱管态   
  21. 当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象.当脱管对象被重新关联到session上时,并再次转变成持久对象.   
  22.   
  23. 脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象.   
  24.   
  25. 脱管对象具有如下特点:   
  26.   
  27. 1.本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;   
  28.   
  29. 2.比瞬时对象多了一个数据库记录标识值. 

抱歉!评论已关闭.