天天看點

文摘一

Inverse和Cascade

Inverse,直譯為“反轉”。在Hibernate語義中,Inverse指定了關聯關系中的

方向。

關聯關系中,inverse=”false”的為主動方,由主動方負責維護關聯關系。具體可

參見一對多關系中的描述。

而Cascade,譯為“級聯”,表明對象的級聯關系,如TUser的Cascade設為all,

就表明如果發生對user對象的操作,需要對user所關聯的對象也進行同樣的操作。如對

user對象執行save操作,則必須對user對象相關聯的address也執行save操作。

初學者常常混淆inverse和cascade,實際上,這是兩個互不相關的概念。Inverse

指的是關聯關系的控制方向,而cascade指的是層級之間的連鎖操作。

延遲加載(Lazy Loading)

為了避免一些情況下,關聯關系所帶來的無謂的性能開銷。Hibernate引入了延遲加載的

概念。

如,示例中user對象在加載的時候,會同時讀取其所關聯的多個位址(address)對象,

對于需要對address進行操作的應用邏輯而言,關聯資料的自動加載機制的确非常有效。

但是,如果我們隻是想要獲得user的性别(sex)屬性,而不關心user的位址(address)

資訊,那麼自動加載address的特性就顯得多餘,并且造成了極大的性能浪費。為了獲得user

的性别屬性,我們可能還要同時從資料庫中讀取數條無用的位址資料,這導緻了大量無謂的系統

開銷。

延遲加載特性的出現,正是為了解決這個問題。

所謂延遲加載,就是在需要資料的時候,才真正執行資料加載操作。

對于我們這裡的user對象的加載過程,也就意味着,加載user對象時隻針對其本身的屬性,

而當我們需要擷取user對象所關聯的address資訊時(如執行user.getAddresses時),才

真正從資料庫中加載address資料并傳回。

繼續閱讀