mongoTemplate.save()を使用してドキュメントを永続化すると、データベースドキュメント内のマッピングされていないすべてのフィールドが破棄されます。スプリングデータmongoTemplate.save()の動作
たとえば、あなたはMongoDBの中の文書のコレクション "マイドキュメント" があります。
{
"_id": ObjectId("552402c3186eb112488b45ea"),
"field1": "value1",
"field2": "value2"
}
をし、あなたのドメインオブジェクトは、次のようになります。ドキュメントを更新後
public class MyDocument {
@Id
private String id;
private String field1;
// getter and setter
}
:
MyDocument doc = myDocumentRepository.getById(<some_id>);
doc.setField1("value3");
mongoTemplate.save(doc);
「フィールド2」のないコレクションで:
{
"_id": ObjectId("552402c3186eb112488b45ea"),
"field1": "value3"
}
それは予期しない動作のように見えるし、いくつかの異なるアプリケーションが同じデータベースを使用している本当のストッパーかもしれません。
MongoTemplateメソッドをオーバーライドするのは問題ありませんか? 他のアイデアは非常に高く評価されます。
ありがとうございました。
更新
@helmyによって示されるように、これはmongoTemplate.save()が動作し、更新メソッドの使用が好ましい方法です。しかし、この場合、mongodbマッピングフレームワークに組み込まれたライフサイクルイベントが失われています。それは全体文書を上書きします - 例えば、全く予期しない、または驚くことではありません、検証、それはOnBeforeSaveメソッドイベントにリスナーを契機に、更新上で動作しません...
"...異なるアプリケーションがほとんど同じデータベースを使用していない場合。" - 基本的な建築上の問題だと私は主張したい。 –
@OliverGierkeはい、それは一般的な状況です。悲しいことに、それは完璧な世界ではありません:) – Savash