Hibernate中保存与持久性以及saveOrUpdate之间的区别
保存與保存或更新與持久保存在Hibernate中
save和saveOrUpdate之間的區(qū)別是什么或save和persist之間的區(qū)別是任何Hibernate面試中常見的面試問題,就像Hibernate中g(shù)et和load方法之間的區(qū)別一樣。 Hibernate Session類提供了幾種方法,可以通過諸如save,saveOrUpdate和
堅持。 您可以根據(jù)將對象持久化到數(shù)據(jù)庫中的要求使用save(),saveOrUpdate()或persist()。 關(guān)鍵是所有這些對象都用于將數(shù)據(jù)存儲到數(shù)據(jù)庫中,但它們也使瞬態(tài)對象在Hibernate中保持不變。
Hibernate問題與Spring框架Interview問題一起 ,由于在ORM中的領(lǐng)先地位,在Java訪談中也很受歡迎。 在出現(xiàn)任何問題之前,最好先準(zhǔn)備好Hibernate的一些問題
J2EE訪談 。 其中之一是save,saveOrUpdate和persist之間的區(qū)別,我們將在本文的Hibernate中看到這一點(diǎn)。
save和saveOrUpdate方法之間的主要區(qū)別是:
save()會在數(shù)據(jù)庫中生成一個新的標(biāo)識符和INSERT記錄,而saveOrUpdate可以根據(jù)記錄的存在來進(jìn)行INSERT或UPDATE。 顯然,saveOrUpdate在使用方面更為靈活,但是它涉及額外的處理以找出表中是否已存在記錄。
總而言之,save()方法通過INSERT SQL查詢將記錄保存到數(shù)據(jù)庫中,生成新的標(biāo)識符,然后將Serializable標(biāo)識符返回。
另一方面,基于數(shù)據(jù)庫中對象的存在,可以使用INSERT或UPDATE的saveOrUpdate()方法。 如果數(shù)據(jù)庫中已經(jīng)存在一個持久性對象,則將執(zhí)行 UPDATE SQL;如果數(shù)據(jù)庫中沒有相應(yīng)的對象,則將運(yùn)行INSERT。
在上一節(jié)中,我們看到了save和saveOrUpdate之間的區(qū)別是什么,現(xiàn)在我們將看到save與persist方法之間的區(qū)別。
1)save和persist之間的第一個區(qū)別是返回類型。 與保存方法類似,也將INSERT記錄持久保存到數(shù)據(jù)庫中,但是
持久的返回類型為空,而保存的返回類型為可序列化對象。
2)持久和保存之間的另一個區(qū)別是兩種方法都可以
瞬時實(shí)例持久化。 但是,persist()方法不能保證將標(biāo)識符值立即分配給持久實(shí)例,分配可能在刷新時發(fā)生。
該圖還說明了Hibernate中持久性對象的生命周期,以及它如何從一種狀態(tài)轉(zhuǎn)移到另一種狀態(tài),例如從“瞬態(tài)到持久”到“持久”。
分離。 您可以看到save()和saveOrUpdate()方法都將對象從“瞬態(tài)”移動到“持久”狀態(tài)。
3)在Hibernate中區(qū)別持久化和保存方法的另一件事是它在事務(wù)邊界外部的行為。 如果它在事務(wù)邊界之外被調(diào)用,persist()方法保證不會執(zhí)行INSERT語句。 save()方法不能保證相同,它返回一個標(biāo)識符,并且如果必須執(zhí)行INSERT來獲取該標(biāo)識符(例如“ identity”生成器),則無論您位于a的內(nèi)部還是外部,此INSERT都會立即發(fā)生。交易。
這些是Hibernate的save,saveOrUpdate和persist方法之間的一些區(qū)別 。 這三種方法都與將對象保存到數(shù)據(jù)庫有關(guān),但是它們的行為卻大不相同。 保存知識,
堅持并保存或更新OrOrUpdate不僅有助于決定如何更好地使用Hibernate API,而且還可以幫助您在Hibernate訪談中表現(xiàn)出色。
您可能喜歡的其他休眠文章和面試問題
- 2020 Java開發(fā)人員路線圖( 指南 )
- Hibernate中一級和二級緩存之間的區(qū)別? ( 回答 )
- 學(xué)習(xí)Hibernate和JPA的前5門課程( 課程 )
- Hibernate中的get()和load()方法之間的區(qū)別? ( 回答 )
- 為Java開發(fā)人員提供的5個Spring和Hibernate培訓(xùn)課程( 列表 )
- 2本書從零開始學(xué)習(xí)休眠( 書籍 )
- 深入學(xué)習(xí)Spring框架的5本書( 書籍 )
- 為什么Hibernate Entity類在Java中不應(yīng)該是final? ( 回答 )
- Java面試中的10個休眠問題( 列表 )
- 網(wǎng)上學(xué)習(xí)Spring和Hibernate的5大熱門課程( 課程 )
- 學(xué)習(xí)Java微服務(wù)的5大熱門課程( 課程 )
- Java開發(fā)人員的15個Spring Boot面試問題( 問題 )
- 每個Java開發(fā)人員都應(yīng)該學(xué)習(xí)的5個Spring Boot功能( 功能 )
感謝您閱讀本文,如果您喜歡本文和面試問題,請與您的朋友和同事分享。 如果您有任何問題或反饋,請發(fā)表評論。
翻譯自: https://www.javacodegeeks.com/2020/03/difference-between-save-vs-persist-and-saveorupdate-in-hibernate.html
總結(jié)
以上是生活随笔為你收集整理的Hibernate中保存与持久性以及saveOrUpdate之间的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最大连接数是什么意思(最大连接数linu
- 下一篇: 电脑固态硬盘的分类(电脑固态硬盘的分类有