如何使用morphia将HashMaps存储在mongodb中?

时间:2011-11-17 21:52:36

标签: mongodb persistence hashmap morphia

如何使用morphia将HashMaps存储在mongodb中?

我不确定这是否是吗啡中的错误,或者我只是做错了。

说我有这个域名模型

@Entity("person")
public class Person {
    private String property1;
    private String property2;
    private HashMap<String, Thing> things;
}

当我尝试使用扩展BasicDAO repo.save(personInstance)的类来保存它时,我收到此错误:( UsedView相当于上面示例中的Thing)

java.lang.IllegalArgumentException:无法序列化类com.model.designed.UsedView     在org.bson.BSONEncoder._putObjectField(BSONEncoder.java:205)     在org.bson.BSONEncoder.putMap(BSONEncoder.java:245)     在org.bson.BSONEncoder._putObjectField(BSONEncoder.java:177)     在org.bson.BSONEncoder.putObject(BSONEncoder.java:121)     在org.bson.BSONEncoder.putObject(BSONEncoder.java:67)     at com.mongodb.OutMessage.putObject(OutMessage.java:189)     在com.mongodb.DBApiLayer $ MyCollection.insert(DBApiLayer.java:245)     在com.mongodb.DBApiLayer $ MyCollection.insert(DBApiLayer.java:209)     在com.mongodb.DBCollection.insert(DBCollection.java:66)     在com.mongodb.DBCollection.save(DBCollection.java:622)     在com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:731)     在com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:793)     在com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:787)     在com.google.code.morphia.dao.BasicDAO.save(BasicDAO.java:109)...

然后如果我改变了:

"private HashMap<String, Thing> things"

"private HashMap<String, String> things"

它保存得很好。

有什么想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

Thing映射为Morphia实体吗?如果没有,morphia不知道如何将它保存到mongo。

答案 1 :(得分:0)

老问题我意识到,但我遇到了这个问题:(未经测试)

“...这可能包含MongoDB驱动程序支持的任何基本类型,包括列表和地图,但没有复杂的对象,除非您已经注册了Morphia的转换器(例如morphia.getMapper().getConverters().addConverter(new MyCustomTypeConverter())。”

自: http://www.carfey.com/blog/using-mongodb-with-morphia/

如上所述:未经测试。

第h