Hibernate4之session核心方法
在學(xué)習(xí)session的核心方法之前,我們先了解下hibernate中幾種對象的狀態(tài):
暫時狀態(tài):這樣的狀態(tài)就好像咱們公司請的暫時員工一樣,他在公司里沒有相關(guān)的資料和id。
? ? 特點:在使用代理主鍵的情況下, OID 通常為 null
? ? ? ??不處于 Session 的緩存中
? ? ? ??在數(shù)據(jù)庫中沒有相應(yīng)的記錄 ??
持久化狀態(tài):我們能夠理解成我們公司的正式在崗職工。
? ? ?特點:OID 不為 null
?位于 Session 緩存中
若在數(shù)據(jù)庫中已經(jīng)有和其相應(yīng)的記錄, 持久化對象和數(shù)據(jù)庫中的相關(guān)記錄相應(yīng)
Session 在 flush 緩存時, 會依據(jù)持久化對象的屬性變化, 來同步更新數(shù)據(jù)庫
在同一個 Session 實例的緩存中, 數(shù)據(jù)庫表中的每條記錄僅僅相應(yīng)唯一的持久化對象
游離狀態(tài):這樣的就類似我們公司在職休假的員工,有其相關(guān)的在崗資料。
? ? 特點:OID 不為 null
不再處于 Session 緩存中
普通情況需下, 游離對象是由持久化對象轉(zhuǎn)變過來的, 因此在數(shù)據(jù)庫中可能還存在與它相應(yīng)的記錄
刪除狀態(tài):這樣的就類似我們的已經(jīng)離職的員工
? ? 特點:在數(shù)據(jù)庫中沒有和其 OID 相應(yīng)的記錄
不再處于 Session 緩存中
普通情況下, 應(yīng)用程序不該再使用被刪除的對象
session的save方法
save方法能夠使一個暫時對象轉(zhuǎn)化為一個持久對象。
1、把要save的對象增加到session中。使它進(jìn)入持久化狀態(tài)
2、選用映射文件指定的標(biāo)識符生成器, 為持久化對象分配唯一的 OID. 在 使用代理主鍵的情況下, setId() 方法為 News 對象設(shè)置 OID 使無效的.
3、計劃運行一條 insert 語句:在 flush 緩存的時候
4、Hibernate 通過持久化對象的 OID 來維持它和數(shù)據(jù)庫相關(guān)記錄的相應(yīng)關(guān)系. 當(dāng) News 對象處于持久化狀態(tài)時, 不同意程序任意改動它的 ID
5、persist() 和 save() 差別:
當(dāng)對一個 OID 不為 Null 的對象運行 save() 方法時, 會把該對象以一個新的 oid 保存到數(shù)據(jù)庫中; ?但運行 persist() 方法時會拋出一個異常.
session的get方法和load方法
同樣點:都能夠依據(jù)跟定的 OID 從數(shù)據(jù)庫中載入一個持久化對象
不同點:
當(dāng)數(shù)據(jù)庫中不存在與 OID 相應(yīng)的記錄時, load() 方法拋出 ObjectNotFoundException 異常, 而 get() 方法返回 null
兩者採用不同的延遲檢索策略:load 方法支持延遲載入策略。
而 get 不支持。
session的update方法
1、Session 的 update() 方法使一個游離對象轉(zhuǎn)變?yōu)槌志没瘜ο? 而且計劃運行一條 update 語句.
2、若希望 Session 僅當(dāng)改動了 News 對象的屬性時, 才運行 update() 語句, 能夠把映射文件里 <class> 元素的 select-before-update 設(shè)為 true. 該屬性的默認(rèn)值為 false
3、當(dāng) update() 方法關(guān)聯(lián)一個游離對象時, 假設(shè)在 Session 的緩存中已經(jīng)存在同樣 OID 的持久化對象, 會拋出異常
4、當(dāng) update() 方法關(guān)聯(lián)一個游離對象時, 假設(shè)在數(shù)據(jù)庫中不存在對應(yīng)的記錄, 也會拋出異常.?
session的saveOrUpdate方法
1、Session 的 saveOrUpdate() 方法同一時候包括了 save() 與 update() 方法的功能
2、該方法使用的情況:
判定對象為暫時對象的標(biāo)準(zhǔn)
Java 對象的 OID 為 null
映射文件里為 <id> 設(shè)置了 unsaved-value ?屬性, 而且 Java 對象的 OID 取值與這個 unsaved-value 屬性值匹配
session的delete方法
1、Session 的 delete() 方法既能夠刪除一個游離對象, 也能夠刪除一個持久化對象
2、Session 的 delete() 方法處理過程
計劃運行一條 delete 語句
把對象從 Session 緩存中刪除, 該對象進(jìn)入刪除狀態(tài).
3、Hibernate 的 cfg.xml 配置文件里有一個 hibernate.use_identifier_rollback 屬性, 其默認(rèn)值為 false, 若把它設(shè)為 true, 將改變 delete() 方法的執(zhí)行行為: delete() 方法會把持久化對象或游離對象的 OID 設(shè)置為 null, 使它們變?yōu)闀簳r對象
轉(zhuǎn)載于:https://www.cnblogs.com/llguanli/p/6889162.html
總結(jié)
以上是生活随笔為你收集整理的Hibernate4之session核心方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内核kernel以及根文件系统rootf
- 下一篇: png 微软ppt 透明度_工作必备,如