十三 NHibernate之物件狀態

2021-05-09 20:17:47 字數 1596 閱讀 7435

引入

在程式執行過程中使用物件的方式對資料庫進行操作,這必然會產生一系列的持久化類的例項物件。這些物件可能是剛剛建立並準備儲存的,也可能是從資料庫中查詢的,為了區分這些物件,根據物件和當前會話的關聯狀態,我們可以把物件分為三種:

1.瞬時物件:物件剛剛建立。該物件在資料庫中沒有記錄,也不在

isession

快取中。如果該物件是自動生成主鍵,則該物件的物件識別符號為空。

2.持久化物件:物件已經通過

nhibernate

進行了持久化,資料庫中已經存在對應的記錄。如果該物件是自動生成主鍵,則該物件的物件識別符號已被賦值。

3.託管物件:該物件是經過

nhibernate

儲存過或者從資料庫中取出的,但是與之關聯的

isession

已經關閉。雖然它有物件識別符號且資料庫中存在對應記錄,但是已經不再被

nhibernate

管理。物件狀態

nhibernate

提供了物件狀態管理的功能,支援三種物件狀態:瞬時態

(transient)

、持久態

(persistent)

、託管態

(detached)

1.瞬時態(transient)

物件剛剛建立,還沒有來及和

isession

關聯的狀態。這時瞬時物件不會被持久化到資料庫中,也不會被賦上識別符號。如果不使用則被

gc銷毀。

isession

介面可以將其轉換為持久狀態。

這像這樣,剛剛建立了乙個

customer

物件,是乙個瞬時態物件:

var

customer =

new

customer

() ;

2.持久態(persistent)

剛被儲存的或剛從資料庫中載入的。物件僅在相關聯的

isession

生命週期內有效,在資料庫中有相應記錄並有識別符號。物件例項由

nhibernate

框架管理,如果有任何改動,在當然操作提交時,與資料庫同步,即將物件儲存更新到資料庫中。

3.託管態(detached)

持久物件關聯的

isession

關閉後,這個物件在

isession

中脫離了關係,就是託管態了,託管物件仍然有持久物件的所有屬性,對託管物件的引用仍然有效的,我們可以繼續修改它。如果把這個物件重新關聯到

isession

上,則再次轉變為持久態,在託管時期的修改會被持久化到資料庫中。

物件狀態轉換

在同步資料庫的情況下執行下面的語句可以轉換物件的狀態。

物件導向 練習 十三

1.定義乙個長方形類,定義 求周長和面積的方法,然後定義乙個測試類進行測試。分析 成員變數 寬width,高high 空參有參構造 成員方法 set 和get 求周長 getlength 求面積 getarea class test1 rectangle class rectangle 空參構造 p...

Nhibernate分析之華山論劍篇

原來一直使用 生成,包括code ith和天平兄的codematic。最近打算系統學習一下nhibernate,經過簡單的一點探索,發現orm和 生成真是個有千秋。本文側重比較一下orm和 生成二者的優缺點,讓二者華山一比高下,目的為去偽存真,使二者能夠相輔相成。從而更好的提高開發效率。1 針對資料...

Nhibernate分析之華山論劍篇

原來一直使用 生成,包括code ith和天平兄的codematic。最近打算系統學習一下nhibernate,經過簡單的一點探索,發現orm和 生成真是個有千秋。本文側重比較一下orm和 生成二者的優缺點,讓二者華山一比高下,目的為去偽存真,使二者能夠相輔相成。從而更好的提高開發效率。本文從下面三...