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:
committed by
Oliver Gierke
parent
ecf15b93e0
commit
4b018a9d7d
@@ -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
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user