Ron*_*fin 5 java map multidimensional-array mongodb morphia
我希望能够在MongoDB集合中持久存储并检索地图图.我正在使用Java通过Morphia访问MongoDB.
我在下面使用的示例是一个集合,其中包含详细说明各种车辆所有者的文档.在该示例中,特定品牌和型号的车辆数量存储在地图地图中
大多数属性都没有遇到任何问题,但对于属性是以下列方式定义的地图的映射:
@Property("vehicles")
private Map<String, Map<String, Integer> vehicles = new HashMap<String, HashMap<String, Integer>>();
Run Code Online (Sandbox Code Playgroud)
创建对象(一些值插入到地图中)并持久保存到Mongo数据库,就像人们期望的那样:
"vehicles" : {
"FORD" : {
"FIESTA" : 1
},
"TOYOTA" : {
"COROLLA" : 1,
"PRIUS": 1
},
"BMW" : {
"SLK" : 1
}
}
Run Code Online (Sandbox Code Playgroud)
但是当通过java代码检索对象时(MongoDB控制台上的查询按预期工作))以下列方式...
Query<Owner> q = ds.find(Owner.class);
System.out.println(q.countAll());
Iterable<Owner> i = q.fetch();
for (Owner o : i) {
System.out.println(o);
}
Run Code Online (Sandbox Code Playgroud)
......代码在q.fetch()行上以可怕的方式死亡.
请帮忙 :)
问题源于Map(作为接口)没有默认构造函数,而Morphia在外部Map上正确分配具体HashMap的构造函数,因此无法解析内部Map的构造函数.这导致了NullPointerException.
经过大量的调试并尝试了这一点,最终我(在同事的帮助下)绊倒了解决方案.
使用具体的HashMap声明地图,而不使用Map接口
@Embedded("vehicles")
private HashMap<String, HashMap<String, Integer>> vehicles = new HashMap<String, HashMap<String, Integer>>();
Run Code Online (Sandbox Code Playgroud)对于那些想知道的人...在@Property或@Embedded注释中指定具体类没有帮助解析内部HashMap的构造函数.
归档时间: |
|
查看次数: |
3725 次 |
最近记录: |