从结构的角度来看,没有区别。
但是,其含义和本质是完全不同的。
1)VO使用新的关键字创建并由GC回收。
当将新数据添加到数据库时,将创建PO,当从数据库中删除数据时,PO将被删除。
它只能在数据库连接中保留下来,并且断开连接将被丢弃。
2)VO是有价值的对象。这是一个业务对象。这是业务层中存在的业务对象。用于业务逻辑。他们生存的目的是提供一个数据可以生存的地方。
PO具有一个状态,每个属性代表当前状态。
这是物理数据对象的表示。
这可用于分离物理数据程序,并简化对象数据和物理数据之间的转换。
3)VO属性取决于当前业务。换句话说,每个属性对应于当前商业逻辑所需的数据名称。
PO属性对应于数据库表字段。
PO对象必须实现序列化接口。
VO是一个独立的JavaObject。
PO是Hibernate合并到EntityMap中的对象。表示与数据库中的记录相对应的Hibernate实体。确认交易后,采购订单更改将反映在实际数据库中。
如果PO从与该会话相对应的实体容器中分离(例如,会话关闭后的PO),则此时它变为VO。
HibernateVO和HibernatePO的概念为系统级设计提出了几个问题。
与传统的MVC体系结构一样,模型层PO可以传递到其他层。
由于PO更新最终分配给了实际数据库,因此将PO更改为另一个级别(例如Vista层)可能会对模型层造成意外损坏。
因此,通常有必要防止直接PO传递到系统的其他层。一种解决方案是通过VO具有与PO相同的属性值,并将其用作传输手段(实际上,此VO将VO传递给其他层,并将其用作DataTransferObject,即所谓的DTO,必要的数据传输。
