CodeDepts merge(CodeDepts detachedInstance) 将传入的detached状态的对象的属性复制到持久化对象中,并返回该持久化对象。如果该session中没有关联的持久化对象,加载一个,如果传入对象未保存,保存一个副本并作为持久对象返回,传入对象依然保持detached状态。void attachDirty(CodeDepts instance) 将传入的对象持久化并保存。如果对象未保存(Transient状态),调用save方法保存。如果对象已保存(Detached状态),调用update方法将对象与Session重新关联。 attachClean(CodeDepts instance) 将传入的对象状态设置为Transient状态。
NonUniqueObjectException问题的解决org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:解决方法: 使用 hibernate 3 的 merge 方法. session.merge(newDetail)即可,它会在 session 缓存中找到持久化对象,把新对象的属性赋过去,再保存原session中的持久化对象。 如果在session或数据库中没有的对象,用merge方法的话,它也能够帮你把记录 insert 到表中,相当于 save 方法。