hibernate save和update以及saveOrUpdate區別

save()方法很顯然是執行保存操做的,若是是對一個新的剛new出來的對象進行保存,天然要使用這個方法了,數據庫中沒有這個對象。mysql

update()若是是對一個已經存在的託管對象進行更新那麼確定是要使用update()方法了,數據中有這個對象。sql

saveOrUpdate()這個方法是更新或者插入,有主鍵就執行更新,若是沒有主鍵就執行插入。數據庫

 

區別:對於一個從託管狀態到瞬態的對象(對於一個從數據庫中取出來又被刪除的對象),這個對象自己是有主鍵的,可是由於被刪除了,因此這個時候由於數據庫中已經沒有了這條記錄了。不過它還有主鍵存在,因此這個時候不能夠使用update()或者是saveOrUpdate(),由於update()方法是認爲數據庫中確定有這條記錄的,而saveOrUpdate的執行過程就是先查看這個對象是否是有主鍵,有主鍵那麼就執行update()方法,沒有主鍵就執行save()方法,所以結果跟調用了update()方法的效果是同樣的,結果就會出錯,由於這個對象已經被刪除了,數據庫中已經沒有這條記錄了,只是它還有主鍵而已(僅僅是存在於內存中),所以這個時候要執行的是save()方法。.net

相關文章
相關標籤/搜索