CodeDepts merge(CodeDepts detachedInstance) 將傳入的detached狀態(tài)的對(duì)象的屬性復(fù)制到持久化對(duì)象中,并返回該持久化對(duì)象。如果該session中沒(méi)有關(guān)聯(lián)的持久化對(duì)象,加載一個(gè),如果傳入對(duì)象未保存,保存一個(gè)副本并作為持久對(duì)象返回,傳入對(duì)象依然保持detached狀態(tài)。 void attachDirty(CodeDepts instance) 將傳入的對(duì)象持久化并保存。如果對(duì)象未保存(Transient狀態(tài)),調(diào)用save方法保存。如果對(duì)象已保存(Detached狀態(tài)),調(diào)用update方法將對(duì)象與Session重新關(guān)聯(lián)。 attachClean(CodeDepts instance) 將傳入的對(duì)象狀態(tài)設(shè)置為Transient狀態(tài)。
NonUniqueObjectException問(wèn)題的解決 org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 解決方法: 使用 hibernate 3 的 merge 方法. session.merge(newDetail)即可,它會(huì)在 session 緩存中找到持久化對(duì)象,把新對(duì)象的屬性賦過(guò)去,再保存原session中的持久化對(duì)象。 如果在session或數(shù)據(jù)庫(kù)中沒(méi)有的對(duì)象,用merge方法的話,它也能夠幫你把記錄 insert 到表中,相當(dāng)于 save 方法。