簡體   English   中英

Spring Data mongoTemplate.save()行為

[英]Spring Data mongoTemplate.save() behaviour

使用mongoTemplate.save()持久保存文檔時,它將破壞數據庫文檔中所有未映射的字段。

例如,您在mongodb中具有文檔集合“ myDocument”:

{
  "_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事件中的偵聽器觸發...

這並不出乎意料或令人驚訝,這就是save()的工作方式-它會覆蓋整個文檔。

我建議您看一下Spring Update類來執行更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM