Я создал приложение, используя jhipster, где я использую MongoRepository
, чтобы вставить или сохранить документ.Но иногда он выдает исключение, но не может понять, в чем причина.Я получаю следующее исключение при работе, то есть Ubuntu:
nested exception is com.mongodb.DuplicateKeyException: Write failed with
error code 11000 and error message 'E11000 duplicate key error index:
db_test.collection_test.$_id_ du
p key: { : "1212" }'
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:73)
at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2114)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:464)
at org.springframework.data.mongodb.core.MongoTemplate.saveDBObject(MongoTemplate.java:1080)
at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:1015)
at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:961)
at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:80)
Ниже приведен код Java:
@JsonIgnoreProperties(ignoreUnknown = true)
@Document(collection = "collection_test")
public class CollectionTest implements Serializable {
@Id
private String id;
@Field("c_date")
@Indexed
private String cDate;
public CollctionTest() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCDate() {
return cDate;
}
public void setCDate(String cDate) {
this.cDate = cDate;
}
@Override
public String toString() {
return "CollctionTest{" +
"id='" + id + '\'' +
", cDate='" + cDate + '\'' +
'}';
}
}
public interface CollectionTestRepository extends
MongoRepository<CollectionTest, String> {
}
@Component
public class CollectionTestService implements ICollectionTestService {
@Autowired
private CollectionTestRepository collectionTestRepository ;
public void saveOrUpdate(CollectionTest collectionTest ) {
try {
collectionTestRepository.save(collectionTest);
LOGGER.info("Inserted document with id: " + collectionTest .getId()
+ " into database");
} catch (Exception ex) {
LOGGER.error("Exception during save or update", ex);
}
}
}
Примечание: это приложение использует сборпроверить объект через слушателя rabbitmq и вызвать метод saveOrUpdate()
.
_id
имеет пользовательское значение из наших сгенерированных значений.Если _id
уже существует в БД, просто обновите документ, иначе вставьте новый документ.Используется MongoRepository.save()
для той же цели