对的,你可以直接用这个BeanUtils.copyProperties(po, vo)拷贝;

解决方案 »

  1.   

    PO是持久对象,VO是值对象
    建议使用VO传输,没有什么关联
    PO如果直接传输到VIEW层,在view层有什么修改,可能发生直接被存储到数据库等意外
      

  2.   

    把VO的值付给PO,然后SVAE(PO)
    我现在是这么 做的.
      

  3.   

    用这个方法进行拷贝的话,前提是PO、VO要具有相同的属性和方法吧?
      

  4.   

    vo是表单模型 当你查数据库查到数据并赋给Vo该VO对象就成了POJO(持久状态)
    当你HIB session关闭时该pojo就成了游离状态
    当你用Vo  new一个对象就是临时状态pojo
    当你对该pojo设置主键和数据库数据中的某条记录主键一样时他就成了游离状态
    一般来说pojo的使用是不允许脱离DAO层的你一定要把该pojo拿到其他地方用的话
    应该new 一个vo对象并且赋值给他传出去用
      

  5.   

    引用 1 楼 cangbai217 的回复:
    对的,你可以直接用这个BeanUtils.copyProperties(po, vo)拷贝; 
     
    用这个方法进行拷贝的话,前提是PO、VO要具有相同的属性和方法吧?不用的,只要拷贝PO与VO相同的属性
      

  6.   

    整理如下:PO即 Persistence Object
    VO即 Value Object
    PO和VO是Hibernate中两个比较关键的概念。
    首先,何谓VO,很简单,VO就是一个简单的值对象。
    如:
    TUser user = new TUser();
    user.setName("Emma");
    这里的user就是一个VO。VO只是简单携带了对象的一些属性信息。
    何谓PO? 即纳入Hibernate管理框架中的VO。看下面两个例子:TUser user = new TUser();
    TUser anotherUser = new TUser();
    user.setName("Emma");
    anotherUser.setName("Kevin");
    //此时user和anotherUser都是VO
    Transaction tx = session.beginTransaction();
    session.save(user);
    //此时的user已经经过Hibernate的处理,成为一个PO
    //而anotherUser仍然是个VO
    tx.commit();
    //事务提交之后,库表中已经插入一条用户”Emma”的记录
    //对于anotherUser则无任何操作
    Transaction tx = session.beginTransaction();
    user.setName("Emma_1"); //PO
    anotherUser.setName("Kevin_1");//VO
    tx.commit();
    //事务提交之后,PO的状态被固化到数据库中
    //也就是说数据库中“Emma”的用户记录已经被更新为“Emma_1”
    //此时anotherUser仍然是个普通Java对象,它的属性更改不会
    //对数据库产生任何影响
    另外,通过Hibernate返回的对象也是PO://由Hibernate返回的PO
    TUser user = (TUser)session.load(TUser.class,new Integer(1));
    VO经过Hibernate进行处理,就变成了PO。
    上面的示例代码session.save(user)中,我们把一个VO “user”传递给
    Hibernate的Session.save方法进行保存。VO和PO的主要区别在于:
    Ø VO是独立的Java Object。
    Ø PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数
    据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实
    际数据库中。
    如果一个PO与Session对应的实体容器中分离(如Session关闭后的PO),那么
    此时,它又会变成一个VO。由PO、VO的概念,又引申出一些系统层次设计方面的问题。如在传统的MVC架构中,
    位于Model层的PO,是否允许被传递到其他层面。由于PO的更新最终将被映射到实
    际数据库中,如果PO在其他层面(如View层)发生了变动,那么可能会对Model
    层造成意想不到的破坏。
    因此,一般而言,应该避免直接PO传递到系统中的其他层面,一种解决办法是,通
    过一个VO,通过属性复制使其具备与PO相同属性值,并以其为传输媒质(实际上,
    这个VO被用作Data Transfer Object,即所谓的DTO),将此VO传递给其他层
    面以实现必须的数据传送。
    属性复制可以通过Apache Jakarta Commons Beanutils
    (BeanUtils.copyProperties(VO, PO))组件提供的属性批
    量复制功能,避免繁复的get/set操作。