0

SpringDataを使用してMongoDBデータベースを管理しています。

1つのコレクションには、2つのObjectIdフィールド、_idと、別のコレクションのインスタンスを参照する他のフィールドがあります。

私のコレクションのクラスは次のようなものです。

public class CollectionA
{
private ObjectId id;
private String collectionADescription
private ObjectId collectionBId
}

このように指定されたクラスを使用すると、「外部キー」を$oidとして正常に挿入できます。

問題は、次のバインディングエラーが発生することです。

フィールド'collectionBId'のオブジェクト'collectionA'のフィールドエラー:拒否された値[]; コード[typeMismatch.collectionA.collectionBId、typeMismatch.collectionBId、typeMismatch.org.bson.types.ObjectId、typeMismatch]; 引数[org.springframework.context.support.DefaultMessageSourceResolvable:コード[collectionA.collectionBId、collectionBId]; 引数[]; デフォルトメッセージ[collectionBId]]; デフォルトメッセージ[タイプ'java.lang.String'のプロパティ値をプロパティ'collectionBId'の必須タイプ'org.bson.types.ObjectId'に変換できませんでした; ネストされた例外はjava.lang.IllegalStateExceptionです:タイプ[java.lang.String]の値をプロパティ'collectionBId'の必須タイプ[org.bson.types.ObjectId]に変換できません:一致するエディターまたは変換戦略が見つかりません]

collectionBId変数をStringに設定すると、変数は$oidではなく文字列として挿入されます

どうすればこれを達成できますか?

サンズ

4

1 に答える 1

2

データストアにリレーションが本当に必要な場合は、Spring Data MongoDB @DBRefアノテーションを使用する必要があります。ただし、埋め込みドキュメントを使用することを優先して、スキーマを再検討/再設計することをお勧めします。このドキュメントは、より良いスキーマを設計するのに役立つかもしれません。

于 2013-05-27T13:20:08.113 に答える