无法在 Spring 引导中更新文档。在 mongorepository.save 上出现 E11000 重复键错误

Unable to update a document in Spring boot. Getting E11000 duplicate key error on mongorepository.save

我无法执行更新操作。使用 spring 启动 mongodb 3.4。 在尝试保存时,我收到以下类型的错误:

WriteError{code=11000, message='E11000 duplicate key error collection

我的域 class 正在扩展另一个基本域 class。我目前的发现是基本域 class 包含用 @Version 注释的“私人长版本”。我的猜测是这是导致问题的领域。 到目前为止我尝试过的事情:

Something went wrong in service layer while updating the Employee.Cannot save entity 119794669940 with version 1 to collection Employee. Has it been modified meanwhile?

WriteError{code=11000, message='E11000 duplicate key error collection.

一些附加信息:

有人知道发生了什么或如何进一步进行吗?

如果您尝试保留具有 null0(对于原语)的实体,则它被视为新实体。

如果版本是任何其他版本,则将其视为更新,并检查版本是否为数据库中存在的版本以进行乐观锁定。

因此您需要设置版本。 要么将其包含在请求的正文中,要么尝试从数据库加载实体并使用其中的版本(如果找到任何实体)。 当然,后一个版本在某种程度上打败了乐观锁定的想法。

另请参阅此

我通过从@jsoniIgnoreProperties 中删除版本字段来解决它,它被添加到那里。它导致在获取任何文档时忽略版本字段,甚至在将版本字段放入 put 正文时,它也将其作为“null”发送。从@jsonIgnoreProperties 列表中删除它导致在获取正文中显示版本字段,并在更新时发送相同的正文允许我更新文档。