本文介绍的是VO和PO的区别,就是值对象和持久对象的区别,希望对你有帮助,一起来看。
VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成。从结构上看,它们并没有什么不同的地方。但从其意义和本质上来看是完全不同的。
1.VO是用new关键字创建,由GC回收的。
PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。
2.VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。
PO则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。
3.VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。
PO的属性是跟数据库表的字段一一对应的。
PO对象需要实现序列化接口。
VO是独立的Java Object。
PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实际数据库中。如果一个PO与Session 对应的实体容器中分离(如Session关闭后的PO),那么此时,它又会变成一个VO。
由Hibernate VO和Hibernate PO的概念,又引申出一些系统层次设计方面的问题。如在传统的MVC架构中,位于Model层的PO,是否允许被传递到其他层面。由于PO的更新最终将被 映射到实际数据库中,如果PO在其他层面(如View层)发生了变动,那么可能会对Model 层造成意想不到的破坏。
因此,一般而言,应该避免直接PO传递到系统中的其他层面,一种解决办法是,通过一个VO,通过属性复制使其具备与PO相同属性值,并以其为传输媒 质(实际上,这个VO被用作Data Transfer Object,即所谓的DTO),将此VO传递给其他层面以实现必须的数据传送。
VO经过Hibernate进行处理,就变成了PO。
session.save(user)中,我们把一个VO “user”传递给Hibernate的Session.save方法进行保存。在save方法中,Hibernate对其进行如下处理:
1.在当前session所对应的实体容器(Entity Map)中查询是否存在user对象的引用。
2.如果引用存在,则直接返回user对象id,save过程结束. Hibernate中,针对每个Session有一个实体容器(实际上是一个Map对象),如果此容器中已经保存了目标对象的引用,那么hibernate会认为此对象已经 与Session相关联。
对于save操作而言,如果对象已经与Session相关联(即已经被加入Session 的实体容器中),则无需进行具体的操作。因为之后的Session.flush过程中,Hibernate会对此实体容器中的对象进行遍历,查找出发生变 化的实体,生成并执行相应的update语句。
3.如果引用不存在,则根据映射关系,执行insert操作。
a) 在我们这里的示例中,采用了native的id生成机制,因此hibernate会从数据库取得insert操作生成的id并赋予user对象的id属性。
b) 将user对象的引用纳入Hibernate的实体容器。
c) save过程结束,返回对象id.
而Session.load方法中,再返回对象之前,Hibernate就已经将此对象纳入其实体容器中。
相关推荐
在 Java 中,PO、VO、TO、BO、DAO、POJO 是六个重要的概念,它们之间存在着紧密的关系,本文将对它们进行详细的解释。 首先,PO(Persistent Object)是持久化对象,它是对象关系映射(O/R Mapping)中的概念,将...
总结来说,PO和VO的主要区别在于其设计目标和应用场景: - PO主要面向数据持久化,与数据库表结构紧密相关,而VO则侧重于数据传输,常用于服务和视图间的交互。 - PO可能包含数据库映射信息,而VO则不涉及数据库...
以下是关于POJO、VO、PO、DO、DTO的详细解释及其区别。 1. POJO(Plain Old Java Object):POJO是一个通用术语,指没有特定框架限制的简单Java对象。它通常包含了业务逻辑和数据属性,不包含任何特定框架的注解或...
总的来说,"vopo转换工具类及所需jar"是一个简化vopo数据格式转换的解决方案,它包含了一个数据验证助手和一个主要的转换器类,以及一系列的外部依赖库。通过这个工具,开发者可以在处理vopo数据时提高效率,减少...
在IT行业中,尤其是在Java开发领域,我们经常遇到“VO”、“BO”和“PO”这样的术语,它们分别代表了Value Object、Business Object和Persistent Object。理解这三个概念对于编写清晰、可维护的代码至关重要。 首先...
本文将详细介绍这些对象的基本概念、应用场景及其之间的联系与区别。 #### 二、PO (Persistent Object) 持久化对象 **定义:** - PO通常是指与数据库表相对应的Java对象。在对象关系映射(ORM)技术中,PO用来简化...
本篇文章将对Java中的PO、VO、TO、BO、DAO、POJO等概念进行详细的解释,帮助读者更好地理解和应用这些技术。 PO(Persistant Object)持久对象 PO是Java中的一种重要概念,表示持久对象。在O/R映射中,PO通常对应...
总之,Oracle POVO工具是Java开发中的得力助手,它通过自动化的方式帮助开发者快速生成符合规范的POJO和VO类,使得团队能更专注于业务逻辑的实现,而非基础架构的搭建。对于大型Oracle数据库项目,这样的工具无疑是...
J2EE基础知识之DTO,VO,PO,DO等定义J2EE基础知识之DTO,VO,PO,DO等定义J2EE基础知识之DTO,VO,PO,DO等定义
本文将详细解析"PO/POJO/VO/BO/DAO/DTO"这六个概念,并探讨它们在实际项目开发中的作用和应用场景。 1. PO(Persistent Object,持久化对象) PO是指与数据库表结构一一对应的Java对象,它通常包含了数据库表中的...
Java中 PO VO BO DTO DAO 和 POJO 关系图
J2EE开发人员必须知道 Java Web开发中VO、PO、DTO、POJO代表含义。
本人以前搞不懂这些o的区别,特意查找资料总结了一下,希望也可以帮到其他人
2. **VO与PO的区别**: - **VO**是值对象,更侧重于业务逻辑层面;而**PO**是有状态的,每个属性代表其当前的状态。 - **VO**的属性根据当前业务逻辑的不同而不同,与业务逻辑紧密相关;而**PO**的属性与数据库表...
在IT行业中,自身关联是一种常见的数据库设计技巧,用于表示一个实体可以与其...在实际开发中,这种设计允许构建复杂的数据结构,如树形菜单或权限系统,同时PO到VO的转换是数据层和业务层交互中常见的数据处理方式。
本文将详细介绍VO (View Object)、DTO (Data Transfer Object)、BO (Business Object)、ORM (Object Relational Mapping)、DAO (Data Access Object)、Entity (实体)、DO (Data Object)、PO (Persistent Object)、...
它们之间的关系是:BO 封装业务逻辑,调用 DAO 方法,结合 PO 和 VO 进行业务操作。DAO 中包含了各种数据库的操作方法,通过它的方法,结合 PO 对数据库进行相关的操作。DTO 和 TO 是用于传输数据的对象,可以减少...
本文将深入探讨五种常见的Java对象类型:持久化对象(Persistent Object,简称PO)、值对象(Value Object,简称VO)、数据访问对象(Data Access Object,简称DAO)、业务对象(Business Object,简称BO)和平凡的...
Java开发中,PO(Persistant Object)、VO(Value Object)、BO(Business Object)、DAO(Data Access Object)和POJO(Plain Old Java Object)是常见的五个概念,它们在软件设计和开发中扮演着不同的角色。...