首先 saveOrUpdate返回void 也就是什么都不返回 而merge会返回一个对象
其次 saveOrUpdate的做法是:自动判断该对象是否曾经持久化过,如果曾持久化过则使用update操作 否则save操作
merge 在执行session.merge(a)代码后,a对象仍然不是持久化状态,a对象仍然不会被关联到Session上 而update会持久化对象
说白了:merge()用法替代了hibernate早期版本的saveOrUpdateCopy,因此该方法的作用只是将当前对象信息保存到数据库,并且不会将对象转换成持久化状态。
当使用update的时候,执行完成后,提供的对象A的状态变成持久化状态。
但当使用merge的时候,执行完成,提供的对象A还是脱管状态,hibernate或者new了一个B,或者检索到 一个持久对象B,并把提供的对象A的所有的值拷贝到这个B,执行完成后B是持久状态,而提供的A还是托管状态。