0

我正在尝试将我的 MongoDB 库更新到最新版本,现在有几个错误,可能相关也可能不相关。第一个是在我的 applicationContext.xml 中,在此部分旁边出现错误“未找到工厂 bean 'customConversions'”:

<mongo:mapping-converter base-package="com.my.model">
    <mongo:custom-converters base-package="com.my.model.converters">
    </mongo:custom-converters>
</mongo:mapping-converter>

我无法从文档中看到我可能遗漏的任何内容。什么可能导致这种情况,我可以做些什么来解决?

如果我尝试运行该应用程序,我现在得到:

org.springframework.data.mapping.model.MappingException: No mapping metadata found for java.util.Date
    at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:206) ~[spring-data-mongodb-1.1.1.RELEASE.jar:na]

我正在使用以下 Maven 依赖项:

org.springframework.data:spring-data-mongodb:1.1.1.RELEASE org.springframework:核心,spring-context等:3.2.1.RELEASE

这只是一个损坏的版本,还是我做错了什么?之前在我的模型类中使用 java.util.Date 没有问题。

4

3 回答 3

1

您是否将其添加到 MongoTemplate 中?http://static.springsource.org/spring-data/data-mongo/docs/1.0.0.M5/reference/html/#d0e2718

于 2013-03-08T02:28:37.067 回答
0

好的,这是一段时间后的事情,但它可能会使人们从旧版 MongoDB 版本升级代码和数据库受益。

我认为 Mongo 改变了一些数据在内部存储的方式。也可能是我们将数据导出为 JSON,然后再次导入。无论哪种方式,我们都会得到具有不正确 Date 和不正确 ObjectId 表示的数据。spring-data-mongo 曾经处理过这个问题,但无论出于何种原因,现在都不再处理了。我们的解决方法是在 Mongo shell 中运行以下类型的脚本:

db.entity.find().forEach(
  function(o){
    delete o._id;
    if (typeof(o.createdTs) !== 'undefined' && typeof(o.createdTs.sec) !== 'undefined'){
        o.createdTs = ISODate(o.createdTs.sec);
    }
    if (typeof(o.updatedTs) !== 'undefined' && typeof(o.updatedTs.sec) !== 'undefined'){
        o.updatedTs = ISODate(o.updatedTs.sec);
    }

    try{
        db.entity2.insert( o );
    } catch (err){
        print("Following node conversion failed.  Error is: " + err);
        printjson(o);
    }

  }
);

db.entity2.renameCollection('entity', true);

现在这对我们有用,因为我们根本没有使用 Mongo 对象 ID - 我们一直在使用不同的、唯一索引的 UUID 字段作为 ID。如果您在其他任何地方都引用 objectId,则需要从旧字符串 id 创建一个 objectId 并使用它。

这使我们能够升级到 spring-data-1.1.0 及更高版本,并且意味着我们现在可以引入 spring-data-neo4j,由于这个问题,我们以前无法在这个项目中使用它。

于 2013-07-03T16:44:54.533 回答
0

我有相同的映射异常(org.springframework.data.mapping.model.MappingException)。MongoDB 记录中的日期之一不知何故具有以下格式的日期,java.util.date 无法解码:

"createdTime": {
    "dateTime": ISODate("2016-09-15T02:01:00.560Z"),
    "offset": {
        "_id": "Z",
        "totalSeconds": 0
    },
    "zone": {
        "_class": "java.time.ZoneOffset",
        "_id": "Z",
        "totalSeconds": 0
    }
}

删除该记录后一切正常。

于 2016-09-20T22:59:13.090 回答