Повторяющаяся проблема с ключом после обновления mongodb-driver-реактивных потоков - PullRequest
0 голосов
/ 28 января 2019

У меня проблема с обновлением документов после обновления mongodb-driver-реактивные потоки версия 1.6.0 до 1.9.0 и выше

Объект, который должен быть обновлен, выглядит как

import lombok.Data; 
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id; 
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.domain.Persistable;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serializable;
import java.time.Instant;

@Data
@Document
@NoArgsConstructor
public class Device implements Serializable, Persistable<String> {

  @Id
  private String id;

  private String deviceId;

  @Indexed
  @LastModifiedDate
  private Instant lastRecorded;

  public void setId(String id) {
  }

  public void setDeviceId(String deviceId) {
    this.deviceId = deviceId;
    this.id = deviceId;
  }

  @Override
  public String getId() {
    return id;
  }

  @Override
  public boolean isNew() {
    return lastRecorded == null;
  }

}

До обновления все работало нормально, после того, как я получаю такую ​​ошибку:

org.springframework.dao.DuplicateKeyException: E11000 duplicate key error index: db2.device.$_id_ dup key: { : "815CM0427E0001510" }; nested exception is com.mongodb.MongoWriteException: E11000 duplicate key error index: db2.device.$_id_ dup key: { : "815CM0427E0001510" } 

Для сохранения / переопределения документа я использую ReactiveMongoRepository # save метод.Как мне изменить приложение, чтобы оно снова заработало, или, может быть, есть какая-то ошибка?

Вот также мой файл конфигурации для подключения:

@Profile(DEV)
@Configuration
public class MongoDevConfig extends AbstractReactiveMongoConfiguration {

  @Value("${spring.data.mongodb.uri}")
  private String uri;
  @Value("${spring.data.mongodb.database}")
  private String database;

  @Override
  public MongoClient reactiveMongoClient() {
    return MongoClients.create(new ConnectionString(uri));
  }

  @Override
  protected String getDatabaseName() {
    return database;
  }

Также, если это поможет в любом случаеЯ использую spring-boot 2.1.1

...