hibernate的一級緩存

* session級別的緩存,hibernate默認必須使用的緩存。
* 默認情況:transaction.commit();將進行 一級緩存數據 與 快照數據 比較
* 如果一致,沒有任何操作
* 如果不一致,將數據更新到數據庫,並同步到一級緩存
* FlushMode 刷新模式,何時將一級緩存中的數據刷新到數據庫中?
* PO類編寫實現接口:Serializable 
* 取值:
ALWAYS ,一直刷,使用query查詢、執行flush方法,事務的提交,就會刷新。底層沒有數據不一致判斷
AUTO ,默認值,自動,使用query查詢、執行flush方法,事務的提交,就會刷新。進行判斷
COMMIT ,使用query查詢不刷新,執行flush方法,事務的提交刷新
MANUAL ,手動,只有執行flush才刷新。
* 操作持久對象的方法
* 清除緩存
flush:將緩存中的數據,刷新到數據庫
clear:清空緩存中的數據
evict:將指定對象從一級緩存移除
* save
把瞬時對象加入到 Session 緩存中, 使它進入持久化狀態
選用映射文件指定的標識符生成器, 爲持久化對象分配唯一的 OID
計劃執行一條 insert 語句,把PO對象當前的屬性值組裝到insert語句中
* update
1使一個脫管對象轉變爲持久化對象, 並且計劃執行一條 update 語句
2如果更新的數據沒有改變,將再次執行一條update語句
可以通過<class select-before-update="true">更新前先查詢,如果沒有改變,將不執行update語句
3當 update() 方法關聯一個脫管對象時, 如果在 Session 的緩存中已經存在相同 OID 的持久化對象, 會拋出異常
4當 update() 方法關聯一個脫管對象時, 如果在數據庫中不存在相應的記錄, 也會拋出異常
* saveOrUpdate
如果參數是瞬時對象就用save方法
如果參數是脫管對象就用update方法
如果參數是持久化對象就直接返回
默認情況下,通過OID的值爲null,來區分瞬時、脫管、持久對象
通過<id unsaved-value="">類修改的劃分依據
* delete
既可以刪除一個脫管對象, 也可以刪除一個持久化對象
計劃執行一條 delete 語句
* 通過OID查詢對象
* get  :立即查詢指定對象,如果對象不存在返回null
* load :默認情況下,生成代理對象,延遲查詢指定對象,如果對象不存在將拋異常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章