0

MongoDBライブラリを最新に更新しようとしていますが、関連している場合と関連していない場合があるいくつかのエラーが発生しています。1つ目は私のapplicationContext.xmlにあり、このセクションの横に「Factorybean'customConversions'notfound」というエラーがあります。

<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:core、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

OK、これは少し後になりますが、コードとデータベースを従来の MongoDB バージョンからアップグレードする人々にとって有益かもしれません。

Mongo は一部のデータの内部保存方法を変更したと思います。または、データを JSON にエクスポートしてから再度インポートした可能性があります。いずれにせよ、間違った Date 表現と正しくない 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 オブジェクト 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 レコードの日付の 1 つに、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 に答える