中科软的面试题:hibernate实体对象的三种状态
来源:互联网 发布:pdf合并软件绿色版 编辑:程序博客网 时间:2024/05/16 11:20
刚开始接触Hibernate的时候,只是简单的把它当做一个API工具,直到后来看到有关VO和PO的内容时,才意识到Hibernate不仅仅是一个O/R Mapping的API工具,它还是一个容器。它可以帮你管理实体对象的生命周期。
实体对象的生命周期有三种状态:
1.Transient(自由状态)
此时的实体对象和数据库中的记录无关联,只是一个普通的JavaBean。
2.Persistent(持久状态)
此时的实体对象和数据库中的记录有关联,其变更将由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所管理的状态。
3.Detached(游离状态)
处于Persistent状态的对象,其对应的Session实例关闭之后,那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象。
从实体对象是否被纳入Hibernate实体管理容器的角度,Transient和Detached状态的实体对象可以统称为VO(Value Object),而被管理的实体对象称为PO(Persistent Object)。两者的区别:
1.VO是相对独立的实体对象,处于非管理状态。
2.PO是Hibernate纳入其实体管理容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反映到实际数据库中。
3.如果一个PO与其对应的Session实例分离,那么此时,它又会变成一个VO。
刚开始接触Hibernate的时候,只是简单的把它当做一个API工具,直到后来看到有关VO和PO的内容时,才意识到Hibernate不仅仅是一个O/R Mapping的API工具,它还是一个容器。它可以帮你管理实体对象的生命周期。
实体对象的生命周期有三种状态:
1.Transient(自由状态)
此时的实体对象和数据库中的记录无关联,只是一个普通的JavaBean。
2.Persistent(持久状态)
此时的实体对象和数据库中的记录有关联,其变更将由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所管理的状态。
3.Detached(游离状态)
处于Persistent状态的对象,其对应的Session实例关闭之后,那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象。
从实体对象是否被纳入Hibernate实体管理容器的角度,Transient和Detached状态的实体对象可以统称为VO(Value Object),而被管理的实体对象称为PO(Persistent Object)。两者的区别:
1.VO是相对独立的实体对象,处于非管理状态。
2.PO是Hibernate纳入其实体管理容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反映到实际数据库中。
3.如果一个PO与其对应的Session实例分离,那么此时,它又会变成一个VO。
Hibernate的对象有3种状态, 分别为:
瞬时态(Transient)、
持久态(Persistent)、
脱管态(Detached).
处于持久态的对象也称为PO(PersistenceObject),瞬时对象和脱管对象也称为VO(ValueObject).
瞬时态
由new命令开辟内存空间的java对象,
eg.Person person=new Person("xiaoxiao","女");
如果没有变量对该对象进行引用,它将被java虚拟机回收.
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象.
持久态
处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化标识.如果是用hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联.
当一个session执行close()或clear()、evict()之后,持久对象变成脱管对象,此时持久对象会变成脱管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下.
持久对象具有如下特点:
1.和session实例关联;
2.在数据库中有与之关联的记录.
脱管态
当与某持久对象关联的session被关闭后,该持久对象转变为脱管对象.当脱管对象被重新关联到session上时,并再次转变成持久对象.
脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象.
脱管对象具有如下特点:
1.本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收;
2.比瞬时对象多了一个数据库记录标识值.
发表
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wzwjr/archive/2009/03/18/4001943.aspx
- 中科软的面试题:hibernate实体对象的三种状态
- hibernate 实体对象的三种状态
- Hibernate 实体对象的三种状态
- hibernate实体对象的三种状态
- Hibernate实体对象的三种状态
- Hibernate实体对象的生命周期(三种状态详解)
- Hibernate实体对象生命周期内的三种状态
- Hibernate实体对象的三种状态以及困惑
- Hibernate实体对象的生命周期(三种状态详解)
- hibernate实体对象的三种状态:自由状态,持久状态,游离状态.
- hibernate实体对象的三种状态:自由状态,持久状态,游离状态.
- hibernate中实体对象的三种状态(生命周期中的三种状态)
- Hibernate中实体的三种状态
- hibernate实体的三种状态
- hibernate实体类的三种状态
- 实体类对象的三种状态
- hibernate学习之路(hibernate实体对象的三种状态)
- 05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法 1
- “为了能够访问动态链接库中的位图资源,在编译动态链接库时,需要使用MFC静态库”
- Java用poi读取excel文件
- 从Tomcat中得到更多-Tomcat的源码分析(转)
- 人生的45个功课~~分享!
- 0119 Constructing the REGISTER Request
- 中科软的面试题:hibernate实体对象的三种状态
- Web.config详解
- LPVOID(转)
- 开通博客了,
- Java用poi读取Word文档
- 回忆在google面试的经历
- 解决左键单击和双击有冲突的问题
- MyEclipse+Jboss下的EJB开发(EJB 2.x)
- 渲染到纹理(Render To Texture, RTT)详解