1. 程式人生 > >Hibernate(二)持久化對象的狀態

Hibernate(二)持久化對象的狀態

nsh insert upload 文檔 get() 關聯 -i 狀態 mar

簡介

以前學習Hibernate的筆記,整理一下便發出來了,防止弄丟。有錯誤的話麻煩各位留言評論,感激不盡。

持久化類

Hibernate完成了從面向對象模型表示的對象關系模型表示的數據結構的映射,可以用面向對象的方式來處理數據庫中記錄。通過映射文件或註解,將持久化類映射為數據庫中的表,而不需要繼承任何類或者接口(即,低入侵式設計)
- 但有幾點最基本的要求:
- 無參構造器
- 標識屬性,最好使用基本類型的包裝類
- 相應的getter/setter方法

瞬態

由new創建的對象且未與Session關聯. 該狀態下對象未被賦予標識值,且所進行的任何修改不會保存到數據庫. 最終會被GC所回收.

持久態

與Session相關聯,被添加至Session內部的集合屬性,擁有與數據庫中對應的標識ID,任何更改都會被Session所檢測且更新數據庫中的記錄。當然,這在session的事務沒有關閉之前才有效

脫管

之前是持久化狀態,現在與Session脫離關聯,對象的改動也不會更新到數據庫中,之後可以通過update()恢復為持久化狀態。可以實現邏輯上的長事務。

三種狀態之間的轉化

技術分享圖片

區別

save()與persist(): 區別於是否立刻執行底層的insert語句,是否返回記錄的主鍵值

get()與load(): 區別於是否延遲加載。若存在記錄,load()返回只含有標識值的代理對象,get()直接從數據庫中獲取。若不存在,load()返回不含標識值的空代理對象(映射文件中已開啟懶加載),get()返回null

參考文檔

[輕量級Java_EE企業應用實戰] https://book.douban.com/subject/6002664/

Hibernate(二)持久化對象的狀態