zoukankan      html  css  js  c++  java
  • Hibernate中saveOrUpdate()和merge()的区别

    this.getSession().merge(obj);
    
    this.getSession().saveOrUpdate(obj);

    saveOrUpdate():

    saveOrUpdate()基本上就是合成了save()和update()

    1.如果该po对象已经在本session中持久化了,在本session中执行saveOrUpdate不做任何事 

    2.如果savaOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常 

    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:

    [org.itfuture.www.po.Xtyhb#5]

    3.saveOrUpdate如果对象没有持久化标识(identifier)属性,对其调用save() ,否则update() 这个对象

    merge():

    1.如果session中有与之对应的对象(主键相同),则会把要保存的obj值复制给session中的对象,然后修改被复制后的session对象

    2.如果session中没有与之对应的对象(主键相同),则会先从数据库中查询一道,然后把所查出来的obj对象复制,则修改查出来的对象

    3.marge()会先查询再修改,merge()后的对象obj状态为托管

  • 相关阅读:
    简单小过一个crc
    BUUCTF-RE-babymips
    为IDA插件findcrypt添加更多规则
    2020网鼎杯第一场青龙组re部分wp
    HexionCTF2020 部分wp
    TGhack2020 re&misc
    java反射总结
    BUUCTF-RE-CrackMe
    青年大学习直接出图片的软件出了bug,用frida干他
    小玩具Teensy
  • 原文地址:https://www.cnblogs.com/1And0/p/5826170.html
Copyright © 2011-2022 走看看