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