2010-04-03 75 views
0

load()只是默認返回一個代理,並且在第一次調用代理之前數據庫不會被命中。休眠代理

這裏代理究竟意味着什麼?

回答

4

首先,代理是design pattern。從Hibernate的意義上講,它是在運行時動態地對你的對象進行子類化。代理對象將包含與對象相同的方法(這就是爲什麼你沒有意識到你正在處理代理),並且正如你所說的那樣,只有在首次調用代理之前,數據庫纔會被命中。

+0

我從你的回答中瞭解到的是「 ahen加載被調用,它將首先檢查持久性上下文,如果對象存在於會話中(而不是實際對象,但代理它),那麼它將返回u, NT THR它會擊中DB,並創建然後返回其持久性方面的代理.. 正確的,如果錯了.. 感謝您的答覆.. – 2010-04-03 09:13:54

+0

當負載被調用時,如果對象已經包含在休眠檢查如果這是真的,那麼這個對象被返回,否則就會創建一個代理 – 2010-04-03 09:40:37

+0

以及如何得到..? – 2010-04-03 09:49:10

0

進一步解釋代理;它們是通過在運行時擴展(創建子類)對象來動態創建的。這個子類具有父實體的所有方法,當訪問任何方法時,代理從DB加載實際對象併爲您調用方法。另外,值得一提的是,所有的類型轉換和instanceof操作符都可以很好地處理代理,因爲它是直接的子類,因此通常不需要執行任何特殊的操作來實現代理。