2013-10-29 69 views
0

我正在嘗試逐步淘汰使用MongoDB/Morphia的較老的java代碼庫。在這個轉換過程中,我希望新平臺能夠寫入相同的MongoDB數據庫/集合,以便每個人都可以並排居住一段時間。我正在做的那一部分沒有問題。我的問題是,在新的平臺中,我需要一個不同的包/類結構,用於我使用morphia映射的對象,而不是當前集合中的對象。Morphia - 與集合關聯的更改類

例如,在老平臺我有這個類:

package com.foo; 

@Entity 
public class Bar { 
    @Id private String id; 
    private String name; 
    ... 
} 

在我蒙戈的數據庫,我現在有一個集「酒吧」和它的文檔具有className屬性設置爲「融爲一體。 foo.Bar」。這非常棒。

我想在新平臺上做的事情是在不同的包中創建一個全新的類來表示該實體,但它以相同的方式與mongo進行交互。我希望能夠做這樣的事情:

package com.foo.legacy; 

@Entity("com.foo.Bar") 
public class LegacyBar { 
    @Id private String id; 
    private String name; 
    ... 
} 

我實現以上不工作,但如果我改變了註釋@Entity(「酒吧」),我沒有得到任何錯誤,但是當我通過id查找實體時,我總是返回null。

那麼...有沒有什麼辦法讓我有2個獨立的虛擬機,有2個類結構和2個不同的Morpha配置,這樣每個虛擬機都可以以相同的方式寫入相同的數據庫/集合?

如果我將LegacyBar更改爲「Bar」並在名爲「com.foo」的包中創建它,則一切正常。我真的希望能夠靈活地以半乾淨的方式隔離所有這些遺留數據。

回答

2

你甚至需要className屬性嗎?

您可以

@Entity(value = "Bar", noClassnameStored = true) 

禁用它拖放在數據庫中的屬性。

引述official documentation

爲什麼你會需要它? 這主要用於將不同的 實體存儲在同一個集合中,並將它們作爲基類或 超類讀取。

如果你不這樣做,它應該是一個簡單的解決方法,允許不同的包結構。

+0

工作。我試圖添加「noClassnameStored」標誌,但它本身並沒有幫助。該數據庫已具有className屬性,因此Morphia忽略了我試圖將其映射到完全不同的類的事實。除了解決我的問題外,從數據庫中除去該屬性。我確信這對舊系統沒有不良影響,但這對我來說已經足夠了。謝謝! –