2012-04-25 57 views
1

我還沒有使用Morphia,但我正在考慮它爲當前的項目。Morphia和對象圖

假設我有一個POJO帶有大量的@Reference註釋,我要求Morphia從數據庫中獲取對象圖。如果我再創建另一個DAO或DataStore調用並要求Morphia獲取已經在第一個圖中實例化的某個對象,那麼Morphia會返回對已經實例化的對象的引用,還是會創建一個新實例?

如果Morphia每次都返回一個對象的新實例,有沒有人有建議如何最好的方法創建一個Morphia支持的存儲庫,將不會複製已經實例化的對象?

回答

3

正如我在Morphia看到的那樣,它會重新閱讀每一篇參考文獻。 這是其中一個問題,爲什麼我創建了Morphium。我在那裏集成了一個緩存層,所以如果你讀了一個參考文獻,這個文件將不會再被讀取(至少,如果你用ID搜索......)

1

我們在生產中使用morphia,有兩種方法確保你不加載我們遇到的參考資料。

一種是在您的主類中定義@Reference元素時使用延遲加載選項。這當然意味着這種行爲對該對象是「全局」的。

更好的方法是不使用Morphia定義@Reference,而是自己管理引用。讓我知道你是否需要代碼示例。

+0

你能分享代碼樣本嗎? – mtariq 2012-06-08 07:09:22

1

我使用@Reference太停止,而是聲明是這樣的:

ObjectId itemId 

,而不是一個領域的項目。這有兩個好處:(1)它允許我通過一個幫助器getObject(...)方法來定義一個getter方法,這是我用對象緩存編寫的;(2)它將一個簡單的ObjectId存儲在Mongo對象中,而不是一個完整的DBRef包括集合名稱,因此大約是數據大小的兩倍。