Java Hibernate對象(瞬時態(tài),持久態(tài),脫管態(tài))詳解
Java Hibernate對象
由于最近學(xué)習(xí)Java Hibernate,這里對Java Hibernate對象的幾種狀態(tài)進行了資料整理, 有興趣的朋友可以看下。
瞬時(transient):數(shù)據(jù)庫中沒有數(shù)據(jù)與之對應(yīng),超過作用域會被JVM垃圾回收器回收,一般是new出來且與session沒有關(guān)聯(lián)的對象。
持久(persistent):數(shù)據(jù)庫中有數(shù)據(jù)與之對應(yīng),當(dāng)前與session有關(guān)聯(lián),并且相關(guān)聯(lián)的session沒有關(guān)閉,事務(wù)沒有提交;
持久對象狀態(tài)發(fā)生改變,在事務(wù)提交時會影響到數(shù)據(jù)庫(hibernate能檢測到)。
(當(dāng)對象save后,會將數(shù)據(jù)持久化,這時obj.set()后再提交事務(wù)hibernate會檢測到數(shù)據(jù)的修改。
而如果在save這個對象之前(即使是處在事務(wù)中),也即是還沒有持久化這個對象之前,用obj.set()則hibernate不能檢測到數(shù)據(jù)修改,不會影響數(shù)據(jù)庫)
脫管/游離(detached):數(shù)據(jù)庫中有數(shù)據(jù)與之對應(yīng),但當(dāng)前沒有session與之關(guān)聯(lián);脫管對象狀態(tài)發(fā)生改變,hibernate不能檢測到。
hibernate對象的三種狀態(tài),轉(zhuǎn)換圖:
Commit()會關(guān)閉session
面試圖:如果判斷一個對象處于怎樣的狀態(tài)?
主要的依據(jù)是: 1. 看該對象是否處于session, 2, 看在數(shù)據(jù)庫中有沒有對應(yīng)的記錄
總結(jié):
瞬時態(tài): 沒有session管理,同時數(shù)據(jù)庫沒有對應(yīng)記錄
持久態(tài): 有session管理,同時在數(shù)據(jù)庫中有記錄
脫管態(tài)/游離態(tài): 沒有session管理,但是在數(shù)據(jù)庫中有記錄.
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
idea使用spring Initializr 快速搭建springboot項目遇到的坑
這篇文章主要介紹了idea使用spring Initializr 快速搭建springboot項目遇到的坑,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11Spring實戰(zhàn)之調(diào)用實例工廠方法創(chuàng)建Bean操作示例
這篇文章主要介紹了Spring實戰(zhàn)之調(diào)用實例工廠方法創(chuàng)建Bean操作,結(jié)合實例形式分析了實例工廠方法創(chuàng)建Bean相關(guān)配置、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2019-11-11Spring實戰(zhàn)之類級別緩存實現(xiàn)與使用方法
這篇文章主要介紹了Spring實戰(zhàn)之類級別緩存實現(xiàn)與使用方法,結(jié)合實例形式分析了Spring類級別緩存配置、屬性、領(lǐng)域模型等相關(guān)操作技巧,需要的朋友可以參考下2020-01-01