当我将spring-data-mongo从1.3.2.RELEASE升级到1.5.2时,我发生了一个奇怪的错误.RELEASE
我有一个看起来像这样的对象:
@Document(collection = "foos")
public class Foo {
@Id
private String id;
private GeoPoint[] tracks;
}
public class GeoPoint {
GeoPointValue[] points;
}
public class GeoPointValue {
@Field(value = "0")
double lon;
@Field(value = "1")
double lat;
@Field(value = "2")
double value;
}
我有一个测试创建其中一个对象,保存它,然后重新加载它。保存时它看起来像这样:
{
"_class" : "com.Foo",
"_id" : ObjectId("53f6630df91f68368b17da91"),
"tracks" : [
{
"points" : [
[
0,
0,
999.9000244140625
],
[
1.8605,
-7.6815,
1
],
[
1.0885,
-0.0001,
1
]
]
},
{
"points" : [
[
-0.0001581075944187447,
-0.003384031509668049,
999.9000244140625
],
[
-0.0003763519887295627,
-0.003578620265780311,
1
],
[
-0.0006024558351500737,
-0.003581886877337006,
1
]
]
}
],
"version" : 0
}
但是当它重新加载时,我得到以下异常,我已追溯到点数组:
java.lang.IllegalArgumentException: Given DBObject must be a BasicDBObject! Object of class [com.mongodb.BasicDBList] must be an instance of class com.mongodb.BasicDBObject
at org.springframework.util.Assert.isInstanceOf(Assert.java:337)
at org.springframework.data.mongodb.core.convert.DBObjectAccessor.<init>(DBObjectAccessor.java:47)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.<init>(MappingMongoConverter.java:1046)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getParameterProvider(MappingMongoConverter.java:230)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:242)
答案 0 :(得分:1)
对于spring-data-mongodb
,GeoPointValue
是一个Map结构,所以它所期望的是BasicDBObject
类型 - BasicDBList
用于List结构,这就是异常的原因,我想。
您可以尝试从{strong>&#34; 0&#34;,&#34; 1&#34;,&#34; 2&#34; 更改GeoPointValue
中@Field的值strong> to &#34; a&#34;,&#34; b&#34;,&#34; c&#34; ,也许异常将消失。
"points"
值 [[],[],[]] ,我觉得很奇怪,它应该是 [{},{},{}] 。如果保存后mongo-java-driver
值为 [{},{},{}] ,则可以将points
从2.12.3恢复为2.11.3,然后可能是司机对数字键进行了一些特殊处理,但spring-data-mongodb
还没有找到它。
答案 1 :(得分:0)
我有同样的问题 我通过将@DBRef添加到字段中来解决了