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 方法。