2013-07-07 96 views
1

下面的代碼給出了錯誤,它表示School類必須實現DBObject接口。問題是這個接口有很多方法。我有近100班,我不想寫數以百萬計的方法。有沒有簡單的方法來保存對象?Mongo db如何保存對象

DBCollection table = db.getCollection("school"); 

School document = new School(); 
table.insert(document); 
+1

它將是擴展[BasicDBObject](http://api.mongodb.org/java/1.3/com/mongodb/BasicDBObject.html)或類似的選項? –

+0

@JoachimIsaksson是的,我正在尋找它。謝謝。 – hellzone

+1

您是否考慮過使用映射器框架,如彈簧數據或morphia? –

回答

2

無需實現DBObject或延長現有實現的一個像BasicDBObject的,你可以有可以保存在數據庫中的所有對象都有一個方法public DBObject toDBObject()創建並返回對象的DBObject表示。 BasicDBObject是一個Map<String, Object>,它將對象數據作爲鍵/值對處理,因此它是一個很好的選擇。

對於更通用的解決方案,您可以使用reflection創建一個方法,該方法可以將任何Java對象轉換爲DBObject。爲了對此有更多的控制,你可以編寫一些註釋,將它們添加到你的類,並讓你的轉換方法檢查它們。

現在您已經爲MongoDB創建了自己的對象映射框架。但是爲什麼在其他人已經做到的時候重新發明輪子?所以在你做這件事之前,看看像morphia這樣的現有映射框架是否能滿足你的用例 - 它們可能會做,並且會節省你幾個小時的編程和幾周的調試時間。

[觀點]

我經常鄙視,因爲impedance mismatch problem的關係數據庫的上下文對象關係映射器,但對於異構數據庫,如MongoDB中他們做很多更有意義,因爲你可以存儲有對象相同的基類,但在同一個 集合中也有一些不同的類特定字段,沒有任何醜陋的解決方法。

[/意見]