`

详细介绍VO和PO的区别

 
阅读更多

本文介绍的是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就已经将此对象纳入其实体容器中。

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    关于VO、PO的理解——java的(PO,VO,TO,BO,DAO,POJO)解释

    在 Java 中,PO、VO、TO、BO、DAO、POJO 是六个重要的概念,它们之间存在着紧密的关系,本文将对它们进行详细的解释。 首先,PO(Persistent Object)是持久化对象,它是对象关系映射(O/R Mapping)中的概念,将...

    JAVA中的POJO、VO、PO、DO、DTO都是什么?有什么区别?

    以下是关于POJO、VO、PO、DO、DTO的详细解释及其区别。 1. POJO(Plain Old Java Object):POJO是一个通用术语,指没有特定框架限制的简单Java对象。它通常包含了业务逻辑和数据属性,不包含任何特定框架的注解或...

    po与vo区别.doc

    总结来说,PO和VO的主要区别在于其设计目标和应用场景: - PO主要面向数据持久化,与数据库表结构紧密相关,而VO则侧重于数据传输,常用于服务和视图间的交互。 - PO可能包含数据库映射信息,而VO则不涉及数据库...

    vopo转换工具类及所需jar

    总的来说,"vopo转换工具类及所需jar"是一个简化vopo数据格式转换的解决方案,它包含了一个数据验证助手和一个主要的转换器类,以及一系列的外部依赖库。通过这个工具,开发者可以在处理vopo数据时提高效率,减少...

    bo,vo,po的区别

    在IT行业中,尤其是在Java开发领域,我们经常遇到“VO”、“BO”和“PO”这样的术语,它们分别代表了Value Object、Business Object和Persistent Object。理解这三个概念对于编写清晰、可维护的代码至关重要。 首先...

    java术语(PO/POJO/VO/BO/DAO/DTO)

    本文将详细解析"PO/POJO/VO/BO/DAO/DTO"这六个概念,并探讨它们在实际项目开发中的作用和应用场景。 1. PO(Persistent Object,持久化对象) PO是指与数据库表结构一一对应的Java对象,它通常包含了数据库表中的...

    po vo dto bo to

    本文将详细介绍这些对象的基本概念、应用场景及其之间的联系与区别。 #### 二、PO (Persistent Object) 持久化对象 **定义:** - PO通常是指与数据库表相对应的Java对象。在对象关系映射(ORM)技术中,PO用来简化...

    Java的(PO,VO,TO,BO,DAO,POJO)解释

    本篇文章将对Java中的PO、VO、TO、BO、DAO、POJO等概念进行详细的解释,帮助读者更好地理解和应用这些技术。 PO(Persistant Object)持久对象 PO是Java中的一种重要概念,表示持久对象。在O/R映射中,PO通常对应...

    Oracle 自动生成POVO工具

    总之,Oracle POVO工具是Java开发中的得力助手,它通过自动化的方式帮助开发者快速生成符合规范的POJO和VO类,使得团队能更专注于业务逻辑的实现,而非基础架构的搭建。对于大型Oracle数据库项目,这样的工具无疑是...

    vo bo po dto dao区别

    本人以前搞不懂这些o的区别,特意查找资料总结了一下,希望也可以帮到其他人

    J2EE基础知识之DTO,VO,PO,DO等定义

    J2EE基础知识之DTO,VO,PO,DO等定义J2EE基础知识之DTO,VO,PO,DO等定义J2EE基础知识之DTO,VO,PO,DO等定义

    Java中 PO VO BO DTO DAO 和 POJO 关系图

    Java中 PO VO BO DTO DAO 和 POJO 关系图

    Java Web开发 之VO、PO、DTO等收集

    J2EE开发人员必须知道 Java Web开发中VO、PO、DTO、POJO代表含义。

    Java的几种对象(PO-VO-DAO-BO-POJO)解释

    2. **VO与PO的区别**: - **VO**是值对象,更侧重于业务逻辑层面;而**PO**是有状态的,每个属性代表其当前的状态。 - **VO**的属性根据当前业务逻辑的不同而不同,与业务逻辑紧密相关;而**PO**的属性与数据库表...

    自身关联的添加、检索及PO到VO得封装、转换

    在IT行业中,自身关联是一种常见的数据库设计技巧,用于表示一个实体可以与其...在实际开发中,这种设计允许构建复杂的数据结构,如树形菜单或权限系统,同时PO到VO的转换是数据层和业务层交互中常见的数据处理方式。

    VO / DTO / BO / ORM DAO entity DO PO/ POJO(分层领域模型规约)整理

    本文将详细介绍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)、...

    java(PO,VO,BO,DAO,POJO)Explained Collection

    Java开发中,PO(Persistant Object)、VO(Value Object)、BO(Business Object)、DAO(Data Access Object)和POJO(Plain Old Java Object)是常见的五个概念,它们在软件设计和开发中扮演着不同的角色。...

    java的几种对象(PO_VO_DAO_BO_POJO)解释

    本文将深入探讨五种常见的Java对象类型:持久化对象(Persistent Object,简称PO)、值对象(Value Object,简称VO)、数据访问对象(Data Access Object,简称DAO)、业务对象(Business Object,简称BO)和平凡的...

    java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解

    它们之间的关系是:BO 封装业务逻辑,调用 DAO 方法,结合 PO 和 VO 进行业务操作。DAO 中包含了各种数据库的操作方法,通过它的方法,结合 PO 对数据库进行相关的操作。DTO 和 TO 是用于传输数据的对象,可以减少...

Global site tag (gtag.js) - Google Analytics