Hibernate(二)持久化對象的狀態
阿新 • • 發佈:2017-11-27
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(二)持久化對象的狀態