2013-07-07 5 views
1

Ниже приведен код ошибки, и он говорит, что класс школы должен реализовывать интерфейс 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

Рассматривали ли вы использование каркаса картера, таких данных весны или морфий? –

ответ

2

Вместо реализации DBObject или расширения одной из существующих реализаций как BasicDBObject, вы можете иметь все объекты, которые могут быть сохранены в базе данных есть метод public DBObject toDBObject() который создает и возвращает DBObject представление объекта. BasicDBObject - это Map<String, Object>, который обрабатывает данные объекта как пары ключ/значение, поэтому он является хорошим кандидатом для этого.

Для получения более общего решения вы можете использовать reflection для создания метода, который может преобразовывать любой объект Java в объект DBObject. Чтобы иметь больше контроля над этим, вы могли бы составить некоторые аннотации, добавить их в свои классы и проверить свой метод конверсии.

Теперь вы создали свою собственную инфраструктуру отображения объектов для MongoDB. Но зачем изобретать колесо, когда другие уже это сделали? Поэтому перед тем, как вы это сделаете, проверьте, соответствуют ли существующие рамки отображения, например morphia, вашим прецедентом - они, вероятно, сделают это и сэкономит вам часы программирования и недели отладки.

[мнение]

Я обычно презираю объектно-реляционные картограф в контексте реляционных баз данных из-за impedance mismatch problem, но для гетерогенных баз данных, таких как MongoDB они делают гораздо больше смысла, потому что вы можете хранить объекты, которые имеют тот же базовый класс, но также и некоторые разные классы, относящиеся к той же таблице без каких-либо уродливых обходных решений.

[/ мнение]

Смежные вопросы