2011-02-08 16 views
50

獲取屬性在實體的ORM /延遲加載的情況下,我國的「水化」一詞的理解如下:澄清術語:「保溼」的實體:從DB

「保溼」描述的過程填充使用延遲加載獲取的實體的部分或全部先前未填充的屬性。

如:類Author從數據庫加載:

@Entity 
class Author 
{ 
    @Id 
    long id; 
    List<Book> books; 
} 

最初,books集合不填充。

我的理解是,從數據庫中加載books集合的過程稱爲「保溼」集合。

這個定義是否正確,是術語常用的地方?在這個過程中還有另一個更常見的術語嗎?

+1

對投票結束這個問題的人來說:我已經添加了一個例子來幫助澄清我所要求的。請評論,如果它仍然不清楚,讓我知道我可以澄清。 – 2011-02-08 03:29:55

回答

90

水合物開始作爲用於從分貝填充的實例化(但空)值對象/模型,術語(在休眠具體。)

其他各種ORM的和類似的BizTalk工具使用水合物和其它相關術語這些天(例如的BizTalk使用術語脫水是指一個實例可用,但尚未填充。)

我個人是反對冗餘術語,填充意味着同樣的事情,而毫無意義的隱喻語言,除了混淆之外什麼也沒加

這種風格的語言的BizTalk擴展,特別是脫水是完全多餘的。有人真的忘了怎麼說,

水合及其相關的冗餘隱喻收集只是純粹的營銷絨毛;他們真的沒有地方作爲技術術語。不幸的是,Hibernate和其他使用這些術語的工具在開發世界中已經深入人心,所以Hydrate和其他人都在這裏待下去。

+12

+1對於「人口稠密」......最簡單的是最好的。 – 2011-02-08 04:24:06

4

水合作用是一個鬆散的術語。在我們公司,我們在他的術語中使用「再水化」來加載整個對象圖的所有對象屬性。 Here is a post討論各種水平的水合(這是一個普遍的用法,雖然他們正在使用休眠的上下文)。

2

我認爲ORM上下文中的「水合物」一詞意味着框架爲您提供了對象。所以這些物體在數據從商店中被拉出後被ORM'水合'。該術語可以在任何時候應用ORM框架爲您提供商店中表示的對象/圖形。

0

術語水合作用廣泛地用於hibernate庫的內容,指的是設置最近加載的對象的字段的過程,並且確實與對象圖形大衆化有關。
但它與延遲加載的概念不同,即給用戶一個半滿的對象並讓其餘的按需加載。
水化總是執行,懶惰或熱切,它是冬眠的東西。
延遲加載僅僅是爲了方便

替換爲您選擇

3

的ORM在Hibernate命名的名稱冬眠,hydration is when a JDBC ResultSet is transformed to an array of raw values

final Object[] values = persister.hydrate(
    rs, id, object, 
    rootPersister, cols, eagerPropertyFetch, session 
); 

final Object[] values = persister.hydrate(
    rs, id, object, 
    rootPersister, cols, eagerPropertyFetch, session 
); 

的水合狀態保存在當前運行的持久化上下文作爲封裝加載時實體快照的[EntityEntry] [3]對象。然後將水合狀態使用:

  • 默認髒檢查機制,對裝載實時快照
  • 的二級緩存,其緩存條目從裝載內置當前實體數據進行比較時間實體快照

反向操作被稱爲dehydration,它將實體狀態複製到SQL INSERT或UPDATE語句中。