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.
This commit is contained in:
Jan Kronquist
2012-10-24 14:58:27 +02:00
committed by Oliver Gierke
parent ecf15b93e0
commit 4b018a9d7d
2 changed files with 17 additions and 3 deletions

View File

@@ -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 {
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

View File

@@ -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
*/