From b91a66f6f9572de28f8e58e0397069c2fcedbdbd Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 26 Feb 2013 11:31:48 +0100 Subject: [PATCH] =?UTF-8?q?DATAMONGO-622=20-=20Saving=20unversioned=20obje?= =?UTF-8?q?ct=20now=20uses=20doInsert(=E2=80=A6).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now rather use doInsert(…) if a versioned object is saved the first time to prevent accidental updates not bumping the version number. --- .../data/mongodb/core/MongoTemplate.java | 3 +-- .../data/mongodb/core/MongoTemplateTests.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index fb25aac2a..107074a5a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -771,8 +771,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { // Fresh instance -> initialize version property if (version == null) { - beanWrapper.setProperty(versionProperty, 0); - doSave(collectionName, objectToSave, this.mongoConverter); + doInsert(collectionName, objectToSave, this.mongoConverter); } else { assertUpdateableIdIfNotSet(objectToSave); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java index 995148535..bc650e603 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java @@ -42,6 +42,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.convert.converter.Converter; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.dao.OptimisticLockingFailureException; import org.springframework.data.annotation.Id; @@ -1498,6 +1499,24 @@ public class MongoTemplateTests { assertThat(person.version, is(0L)); } + /** + * @see DATAMONGO-622 + */ + @Test(expected = DuplicateKeyException.class) + public void preventsDuplicateInsert() { + + template.setWriteConcern(WriteConcern.SAFE); + + PersonWithVersionPropertyOfTypeInteger person = new PersonWithVersionPropertyOfTypeInteger(); + person.firstName = "Dave"; + + template.save(person); + assertThat(person.version, is(0)); + + person.version = null; + template.save(person); + } + static class MyId { String first;