Когда вы сохраняете документ с помощью mongoTemplate.save(), он уничтожает все немаркированные поля в документе базы данных.Spring Data 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 случае ...
«... когда несколько разных приложений используют одну и ту же базу данных». - Я бы сказал, что это фундаментальная архитектурная проблема. –
@OliverGierke Да, но это обычная ситуация. К сожалению, это не идеальный мир :) – Savash