Фабричный компонент customConversions не найден

Я пытаюсь обновить свои библиотеки MongoDB до последней версии, и теперь у меня есть пара ошибок, которые могут быть связаны или не связаны. Первый находится в моем applicationContext.xml, где у меня есть ошибка «Factory 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-контекст и т. д.: 3.2.1.RELEASE

Это просто битый релиз или я что-то не так делаю? Раньше у меня не было проблем с использованием java.util.Date в моих классах моделей.


person Mick Sear    schedule 27.02.2013    source источник
comment
К вашему сведению, я вернулся к spring-data-mongodb 1.0.3.RELEASE и не получил этих проблем. Тем не менее, интересно узнать, почему это происходит, для будущих обновлений.   -  person Mick Sear    schedule 27.02.2013


Ответы (3)


Вы добавили его в MongoTemplate? http://static.springsource.org/spring-data/data-mongo/docs/1.0.0.M5/reference/html/#d0e2718

person imgr8    schedule 08.03.2013
comment
Да, этот конфиг был там с ранней версии - я его не менял. Эта проблема возникла, когда я обновил свои зависимости Maven - я просто вернулся к более старым версиям, пока у меня не будет больше времени, чтобы поиграть с ними. - person Mick Sear; 09.03.2013

Хорошо, это немного позже, но это может принести пользу людям, обновляющим код и базу данных с устаревших версий MongoDB.

Я думаю, что Mongo изменил способ внутреннего хранения некоторых данных. Или могло случиться так, что мы экспортировали данные в JSON, а затем снова импортировали их. В любом случае у нас остались данные с неправильным представлением даты и ObjectId. Spring-data-mongo раньше справлялся с этим, но по какой-то причине больше не справляется. Исправление для нас состояло в том, чтобы запустить следующий тип скрипта в оболочке Mongo:

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 — вместо этого мы использовали другое поле UUID с уникальным индексом в качестве идентификатора. Если вы ссылаетесь на objectId где-либо еще, вам нужно будет создать objectId из старого идентификатора строки и использовать его.

Это позволило нам перейти на spring-data-1.1.0 и выше, а также означает, что теперь мы можем представить spring-data-neo4j, чего мы раньше не могли сделать с этим проектом из-за этой проблемы.

person Mick Sear    schedule 03.07.2013

У меня было такое же исключение сопоставления (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
    }
}

Все работало нормально после того, как я удалил эту запись.

person user2355012    schedule 20.09.2016