使用mongoTemplate.save()持久保存文档时,它会销毁数据库文档中所有未映射的字段。
例如,你有一个集合“myDocument”,文件在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);
您将在没有“field2”的集合中获取文档:
{
"_id": ObjectId("552402c3186eb112488b45ea"),
"field1": "value3"
}
看起来像是意外的行为,当很少有不同的应用程序使用同一个数据库时,它可能是一个真正的阻止。
重写MongoTemplate方法是否可接受? 任何其他想法将非常感激。
感谢。
更新
如@helmy所述,这是mongoTemplate.save()的工作方式,并且首选使用更新方法。但在这种情况下,我正在失去构建在mongodb映射框架中的生命周期事件。例如,验证不会对onBeforeSave事件中的侦听器触发的更新起作用...