【问题标题】:Factory bean 'customConversions' not found未找到工厂 bean 'customConversions'
【发布时间】:2016-09-21 07:13:52
【问题描述】:

我正在尝试将我的 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 没有任何问题。

【问题讨论】:

  • 仅供参考,我已经恢复到 spring-data-mongodb 1.0.3.RELEASE 并且没有遇到这些问题。仍然有兴趣知道为什么会发生这种情况,以备将来更新

标签: spring spring-data-mongodb


【解决方案1】:

【讨论】:

  • 是的,该配置从早期版本就在那里 - 我没有更改它。当我升级我的 Maven 依赖项时出现了这个问题 - 我现在刚刚回到旧版本,直到我有更多时间玩它
【解决方案2】:

好的,这是一段时间后的事情,但它可能会让人们从旧版 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,由于这个问题,我们以前无法对这个项目进行此操作。

【讨论】:

    【解决方案3】:

    我遇到了同样的映射异常 (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
        }
    }
    

    删除该记录后一切正常。

    【讨论】:

      猜你喜欢
      • 2013-04-15
      • 2017-04-11
      • 2019-03-13
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2011-12-14
      相关资源
      最近更新 更多