Browse Source

DATAMONGO-622 - Saving unversioned object now uses doInsert(…).

We now rather use doInsert(…) if a versioned object is saved the first time to prevent accidental updates not bumping the version number.
pull/62/head
Oliver Gierke 13 years ago
parent
commit
b91a66f6f9
  1. 3
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
  2. 19
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java

3
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

@ -771,8 +771,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { @@ -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);

19
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java

@ -42,6 +42,7 @@ import org.springframework.beans.factory.annotation.Autowired; @@ -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 { @@ -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;

Loading…
Cancel
Save