当我将spring-data-mongo从1.3.2升级到1.5.2时,发生了一个奇怪的错误。
我有一个像这样的物体:
@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;
}我有一个测试tat创建了其中一个对象,保存它,然后重新加载它。当它保存时,如下所示:
{
"_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)发布于 2014-08-22 15:25:54
对于spring-data-mongodb,GeoPointValue是一个映射结构,所以它所期望的是BasicDBObject类型-- BasicDBList是用于列表结构的,我认为这就是异常的原因。
您可以尝试将GeoPointValue中@Field的值从"0“、"1”、"2"更改为"a“、"b”、"c",也许异常将消失。
我感到奇怪的是,"points"值是[,],应该是 { }、{ }、{} 。您可以将mongo-java-driver从2.12.3恢复到2.11.3,如果保存后的points值为 { }、{ }、{} ,那么驱动程序可能会对Number Key进行一些特殊处理,但spring-data-mongodb尚未捕获它。
发布于 2019-06-08 13:58:50
我也有同样的问题,我通过在字段中添加@DBRef来解决这个问题。
https://stackoverflow.com/questions/25449594
复制相似问题