2016-01-12 44 views
2

我認識一個代理對象是:Hibernate如何實現代理對象?

代理是允許Hibernate對象在數據庫中相互關聯的雲分解成更小的塊的機制,可以輕鬆裝入內存。

  • 我試圖搞清楚的是,如何冬眠做其背後的 場景和它是如何通過休眠實施?
  • 我的意思是它如何緩存在內存中?它是一級緩存還是二級緩存?有沒有什麼好的閱讀呢?
+3

有人誰downvoted這個問題,必須有一些想法,對吧?爲什麼不分享它? –

+1

可能是因爲他們希望你[使用源代碼](https://github.com/hibernate/hibernate-orm) - 我通過在Google中輸入「hibernate github」找到的,因爲我認爲這是發現Hibernate源的地方。我是對的 :) –

回答

3

Hibernate使用javassist創建動態代理而不是具體實體來填充正在引用其他持久實體(或持久實體集合)的獲取實體的字段。

(注意,如果您標記的關係,預先抓取:Hibernate不會創建代理,但具體的實體這不是默認設置)

了Javassist超過standard dynamic proxy mechanism的主要優點是:它可以動態創建代理具體類,而不僅僅是接口。

代理的責任是執行「透明」需要(即,當需要訪問一個代理實體)

代理和第一或第二級高速緩存並不真正連接概念當數據庫讀取操作。我們可以說,如果當持有它的實體沒有連接到一個開放的會話時(即當持有該實體的實體不在第一級緩存中)時,如果試圖「解析」代理,它會引發LazyInitializationException因爲在這種情況下沒有辦法執行數據庫讀取)