Browse Source

DATAMONGO-562 - Saving versioned entity with already set id now works.

Instead of inspecting the id property we now assume the version property unset for initialization and work from there.
pull/16/head
Jan Kronquist 13 years ago committed by Oliver Gierke
parent
commit
4b018a9d7d
  1. 7
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
  2. 13
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java

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

@ -760,10 +760,11 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { @@ -760,10 +760,11 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware {
this.mongoConverter.getConversionService());
MongoPersistentProperty idProperty = entity.getIdProperty();
MongoPersistentProperty versionProperty = entity.getVersionProperty();
Object id = beanWrapper.getProperty(idProperty);
Number version = beanWrapper.getProperty(versionProperty, Number.class, !versionProperty.usePropertyAccess());
// Fresh instance -> initialize version property
if (id == null) {
if (version == null) {
beanWrapper.setProperty(versionProperty, 0);
doSave(collectionName, objectToSave, this.mongoConverter);
} else {
@ -771,7 +772,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { @@ -771,7 +772,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware {
assertUpdateableIdIfNotSet(objectToSave);
// Create query for entity with the id and old version
Object version = beanWrapper.getProperty(versionProperty);
Object id = beanWrapper.getProperty(idProperty);
Query query = new Query(Criteria.where(idProperty.getName()).is(id).and(versionProperty.getName()).is(version));
// Bump version number

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

@ -1310,6 +1310,19 @@ public class MongoTemplateTests { @@ -1310,6 +1310,19 @@ public class MongoTemplateTests {
template.save(person);
}
/**
* @see DATAMONGO-562
*/
@Test
public void optimisticLockingHandlingWithExistingId() {
PersonWithVersionPropertyOfTypeInteger person = new PersonWithVersionPropertyOfTypeInteger();
person.id = new ObjectId().toString();
person.age = 29;
person.firstName = "Patryk";
template.save(person);
}
/**
* @see DATAMONGO-539
*/

Loading…
Cancel
Save