save
和saveOrUpdate
之間的區別是什么或save
和persist
之間的區別是任何Hibernate面試中常見的面試問題,就像Hibernate中get和load方法之間的區別一樣。 Hibernate Session類提供了幾種通過save
, saveOrUpdate
和persist
等方法將對象保存到數據庫中的方法。 您可以根據將對象持久存儲到Database中的要求使用save()
, saveOrUpdate()
或persist()
。 Hibernate問題與Spring框架Interview問題一起 ,在J2EE訪談中也很受歡迎,因為它的地位非常重要。 在出現在任何J2EE采訪中之前,最好先準備Hibernate的一些問題。 其中之一是save
, saveOrUpdate
和persist
之間的區別 ,我們將在本文的Hibernate中看到這一點。 Hibernate中save和saveOrUpdate之間的區別
save
and
saveOrUpdate
方法 之間的主要區別是save()
生成一個新的標識符并將INSERT記錄插入數據庫,而saveOrUpdate
可以根據記錄的存在而進行INSERT或UPDATE。 顯然, saveOrUpdate
在使用方面更為靈活,但是它需要進行額外的處理才能找出表中是否已存在記錄。 總而言之, save()
方法通過INSERT SQL查詢將記錄保存到數據庫中,生成一個新的標識符,然后將Serializable標識符back
。 另一方面,基于數據庫中對象的存在,可以使用INSERT或UPDATE的saveOrUpdate()
方法。 如果數據庫中已存在持久性對象,則將執行 UPDATE SQL,并且如果數據庫中沒有對應的對象,則將運行INSERT。
Hibernate中保存和持久方法之間的區別
在上一節中,我們看到了save
和saveOrUpdate
之間的區別是什么,現在我們將看到save
方法與persist
方法的區別。
- save和
persist
之間的第一個區別是返回類型。 與保存方法persist
類似,也將INSERT記錄插入數據庫,但是persist
返回類型為void,而save的返回類型為Serializable對象。 -
persist
和保存之間的另一個區別是,這兩種方法都使臨時實例persist
。 但是,persist
()方法不能保證將標識符值立即分配給persist
實例,分配可能在刷新時發生。 - 區別Hibernate中
persist
和保存方法的另一件事是在事務邊界之外存在行為。persist
()方法可確保如果在事務邊界之外調用它,則不會執行INSERT語句。save()
方法不能保證相同,它返回一個標識符,并且如果必須執行INSERT來獲取該標識符(例如“ identity”生成器),則無論您位于a的內部還是外部,此INSERT都會立即發生。交易。 - Hibernate中
save
和persist
方法之間的第四個區別與先前的save
和persist
差異有關。 由于其上述persist
方法在事務邊界之外的行為,因此在具有擴展Session
上下文的長時間對話中很有用。 另一方面,在具有擴展Session上下文的長時間對話中,保存方法不是很好。
這些是Hibernate的save
, saveOrUpdate
和persist
方法之間的一些區別 。 這三種方法都與將對象保存到數據庫有關,但是行為卻大不相同。 有關save
, persist
和saveOrUpdate
知識,不僅有助于決定如何更好地使用Hibernate API,而且還可以幫助您在Hibernate采訪中做得更好。
別忘了分享!
參考:我們的JCG合作伙伴 Javin Paul在Javarevisited博客上提供了Hibernate中save,persist和saveOrUpdate之間的區別 。
翻譯自: https://www.javacodegeeks.com/2012/09/hibernate-save-vs-persist-and.html