下面的代码给出了错误,它说学校类必须实现DBObject接口。问题是这个界面有很多方法。我有近100课,我不想写数百万种方法。有没有简单的方法来保存对象?
DBCollection table = db.getCollection("school");
School document = new School();
table.insert(document);
答案 0 :(得分:2)
不是实现DBObject
或扩展现有实现之一,如BasicDBObject
,您可以让所有可以保存在数据库中的对象都有一个方法public DBObject toDBObject()
,它创建并返回一个DBObject
对象的表示。 BasicDBObject
是Map<String, Object>
,它将对象数据作为键/值对处理,因此它是一个很好的候选对象。
对于更通用的解决方案,您可以使用reflection创建一个可以将任何Java对象转换为DBObject的方法。要对此进行更多控制,您可以编写一些注释,将它们添加到您的类中,然后让您的转换方法进行检查。
现在您已经为MongoDB创建了自己的对象映射框架。但是,当其他人已经完成它时,为什么要重新发明轮子呢?因此,在执行此操作之前,请检查现有的映射框架(如morphia)是否满足您的用例 - 他们可能会这样做,并且可以节省您的编程时间和数周的调试时间。
[意见]
由于impedance mismatch problem,我通常在关系数据库的上下文中鄙视对象关系映射器,但对于像MongoDB这样的异构数据库,它们更有意义,因为你可以存储具有相同基类的对象但是在同一个 table 集合中也有一些不同的特定于类的字段,没有任何丑陋的解决方法。
[/意见]