spring-mongo鉴于DBObject必须是BasicDBObject

时间:2014-08-22 14:38:04

标签: spring-data-mongodb

当我将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)

2 个答案:

答案 0 :(得分:1)

对于spring-data-mongodbGeoPointValue是一个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添加到字段中来解决了