從5.1final版開始,DO的緩存轉換到DataStruct的緩存中.只有那些原始的DataStructs加入到新的DataStruct緩存中而不是所有的DO,DO只有一個數據(DataStruct對象).所有的轉換是在這個對象上完成的, DataStruct對象包含了每個表的列的值,現在,DO保存了兩個DataStruct引用.
(1) orginalData
(2) data
orginalData保存了原始的數據(從數據庫中讀取),這個數據將不會被修改直到提交,而且如果緩存存在,則該DataStruct對象被加到DataStruce緩存中去.
Data僅僅當數據被修改才會產生(拷貝orginalData),如果第二個DataStruct存在,那麼DO的屬性”isDirty”將被設置為true,即使經過一些修改之後,新的DataStruct保存了根orginalData一樣的值.該DO仍然是髒的,所有沒有辦法讓屬性isDirty由true到false,除非在提交事務的過程中,如果事務被提交,新的DataStruct將會轉移到orginalData.新的
DataStruct將會再次置為空,所有屬性isDirty變為false.
一個新生成的DO(內存中,而不是數據庫中)將只有一個DataStruct對象數據, orginalData中的orginalData數據值在提交之前為空..
oid和version屬性從DO轉移到DataStruct對象.
DataStruct中新添加的屬性有:
isEmpty和databaseName
DataStruct中新添加的方法有:
getOID()
setDatabase(String dbName)
……..
DODS為每張表擁有緩存的可能.可能的緩存類型有:None,LRU.和FULL.
DODS有兩種層次的緩存.
數據緩存級.只有一個LRU緩存,
查詢緩存級,可以有兩個查詢緩存(簡單和復雜類型),這些查詢緩存也是LRU緩存.
緩存的配置:
同上面的類似,也分為三個層次的.