首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >给DBObject的春季芒果一定是BasicDBObject

给DBObject的春季芒果一定是BasicDBObject
EN

Stack Overflow用户
提问于 2014-08-22 14:38:04
回答 2查看 1.9K关注 0票数 2

当我将spring-data-mongo从1.3.2升级到1.5.2时,发生了一个奇怪的错误。

我有一个像这样的物体:

代码语言:javascript
运行
复制
@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创建了其中一个对象,保存它,然后重新加载它。当它保存时,如下所示:

代码语言:javascript
运行
复制
{
    "_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
}

但是,当它重新加载时,我得到了以下异常,我跟踪到了点数组:

代码语言:javascript
运行
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-22 15:25:54

对于spring-data-mongodbGeoPointValue是一个映射结构,所以它所期望的是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尚未捕获它。

票数 1
EN

Stack Overflow用户

发布于 2019-06-08 13:58:50

我也有同样的问题,我通过在字段中添加@DBRef来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25449594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档