无法在 Spring boot 中更新文档。在 mongorepository.save 上出现 E11000 重复密钥错误

Dil*_*Dev 4 java spring spring-data-mongodb spring-boot

我无法执行更新操作。将 spring boot 与 mongodb 3.4 结合使用。在尝试保存时,我收到以下错误:

WriteError{code=11000, message='E11000重复键错误集合

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

  • 初始化“private Long version = 0L;” 我的文档仅更新一次,进一步更新会出现以下错误:

更新 Employee 时服务层出现问题。无法将版本 1 的实体 119794669940 保存到 Employee 集合。同时修改了吗?

WriteError{code=11000, message='E11000重复键错误集合。

一些附加信息:

  • 在迄今为止我尝试过的上述任何情况下,我都没有在放置正文中发送版本(使用版本密钥发送它们会给出相同的错误。

任何人都知道发生了什么事或如何进一步进行?

Jen*_*der 8

null如果您尝试使用或(对于原语)来持久化实体,0则它将被视为新实体。

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

因此您需要设置版本。将其包含在请求正文中,或者尝试从数据库加载实体并使用其中的版本(如果找到)。当然,后一个版本有点违背了乐观锁定的想法。

如果您使用 Spring Data Rest ,另请参阅有关版本属性处理的答案