sto usando un:Spring MongoRepository aggiorna o upserting invece di inserire
org.springframework.data.mongodb.repository.MongoRepository
parto da un DB vuoto e creare un oggetto con _id = 1234
per esempio, e impostare altri campi della stringa di hello
per esempio , e quindi:
repository.save(object);
Tutto va bene, salva il documento in MondoDB.
creare un nuovo oggetto, impostare lo stesso _id = 1234
ma impostare l'altro campo Stringa da world
e poi ad un altro salvataggio:
repository.save(newObject);
risultati: il salvataggio opere, ma aggiorna l'oggetto originale.
Risultati previsti: questo non dovrebbe riuscire con uno DuplicateKeyException
come _id
è univoco e sto utilizzando 2 oggetti separati quando eseguo ogni salvataggio.
Difetto in primavera o sto facendo qualcosa di sbagliato ???
Il problema è che '_id' sembra comportarsi diversamente da qualsiasi altro campo. Per esempio, se ho un campo chiamato 'name' nel documento mongo, e creo un indice UNIQUE su quel campo, facendo i passi menzionati nella mia domanda si otterrà un' DuplicateKeyException' previsto. Inoltre, per l'API mongorepository di primavera, non esiste l'API 'insert', solo' save'. Ho la sensazione che questo sia un bug in primavera. – Marc
C'è un metodo di inserimento: http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/repository/MongoRepository.html#insert-S- – tinker
L'indice la validazione è diversa, l'ottimizzazione in save è che può aggiornare direttamente l'oggetto se viene trovato, questo è in base alla progettazione. – tinker