hibernate之saveorupdate()、save()、update()都有什么區別


saveorupdate()如果傳入的對象在數據庫中有就做update操作,如果沒有就做save操作。
save()在數據庫中生成一條記錄,如果數據庫中有,會報錯說有重復的記錄。
update()就是更新數據庫中的記錄

 

主鍵在saveorupdate()方法中是起着關鍵作用的,只有這個主鍵的值不為空的時候才進行insert還是update的判斷,否則直接insert

若主鍵不為空(不能使自己分配的主鍵),就可以進行saveorupdate()操作了。

當你的主鍵是自己分配的時候 就不能使用saveorupdate()了,否則會報 Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1  這個錯誤。這時只能使用save()方法直接保存了。

 

save是返回插入數據的主鍵,而saveOrUpdate是void方法。
save方法更適用於確定了是要插入,而且需要得到插入數據的主鍵。
而saveOrUpdate更傾向於不缺定是插入還是更新,而且你不需要得到他的主鍵。

 

save()和saveOrUpdate()方法可以在沒有事務的情況下執行,但是如果沒有手動調用flush()方法會面臨關聯對象不被保存的問題。

 

另外:

persist()方法:

  • persist()方法會將實體對象添加到持久化上下文中,如此被保存的實體后續改變會被記錄。如果在提交事務或者會話flush(),對象的屬性被重新賦值,那么這個變化也會被保存到數據庫中。
  • persist()方法必須在事務內執行,才能夠將數據插入數據庫。如果不在事務范圍內執行,數據將丟失。
  • 最后,persist()方法返回值是void,也就是說不會返回任何的值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM