他说的就是如果没有该条记录,则会被创建;
如果有该条记录,但内容有变,则会被修改;
相当于save or update

解决方案 »

  1.   

    那为什么有了saveorupdate()方法,还要创建这个merge()方法呢,有什么区别?
      

  2.   

    merge 和saveOrUpdate不一样,当session中某持久化对象有id相同的两个纪录时,必须用merge,merge会在保存之前来合并记录,不然会报错。合并记录后的动作和saveOrUpdate一样。
      

  3.   

    主要的区别在于POJO对象的状态!!!update或者saveorupdate后,POJO的状态为持久态
    而merge后,对象的状态仍然为托管状态!这个区别牵连出的区别非常大,可以自己在开发中慢慢体会
      

  4.   

    没错merge是将要持久化的对象cope一份 然后对副本进行持久化操作
    好象有个方法persist也是一样的  
      

  5.   

    如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象的状态覆盖旧有的持久实例 
    如果session没有相应的持久实例,则尝试从数据库中加载,或创建新的持久化实例,最后返回该持久实例 
    用户给出的这个对象没有被关联到session上,它依旧是脱管的 
    重点是最后一句:
    当我们使用update的时候,执行完成后,我们提供的对象A的状态变成持久化状态
    但当我们使用merge的时候,执行完成,我们提供的对象A还是脱管状态,hibernate或者new了一个B,或者检索到
    一个持久对象B,并把我们提供的对象A的所有的值拷贝到这个B,执行完成后B是持久状态,而我们提供的A还是托管状态
      

  6.   

    说的很精辟!我有一个疑问!就是想问一下!那个a diffrent object of the same id of the session(凭着记忆想的) 这种情况会指的出现在同一个session还是两个session啊