Preserve given Id on insert.
This commit fixes an issue where an existing Id got replaced with a generated one when using MongoId annotation. Closes: #4184 Closes: #4197 Original pull request: #4203.
This commit is contained in:
committed by
Mark Paluch
parent
ff28789507
commit
034a3528af
@@ -272,7 +272,7 @@ class QueryOperations {
|
||||
*/
|
||||
<T> MappedDocument prepareId(@Nullable MongoPersistentEntity<T> entity) {
|
||||
|
||||
if (entity == null) {
|
||||
if (entity == null || source.hasId()) {
|
||||
return source;
|
||||
}
|
||||
|
||||
|
||||
@@ -3636,6 +3636,26 @@ public class MongoTemplateTests {
|
||||
assertThat(target).isEqualTo(source);
|
||||
}
|
||||
|
||||
@Test // GH-4184
|
||||
void insertHonorsExistingRawId() {
|
||||
|
||||
RawStringId source = new RawStringId();
|
||||
source.id = "abc";
|
||||
source.value = "new value";
|
||||
|
||||
template.insert(source);
|
||||
|
||||
org.bson.Document result = template
|
||||
.execute(db -> db.getCollection(template.getCollectionName(RawStringId.class))
|
||||
.find().limit(1).cursor().next());
|
||||
|
||||
assertThat(result).isNotNull();
|
||||
assertThat(result.get("_id")).isEqualTo("abc");
|
||||
|
||||
RawStringId target = template.findOne(query(where("id").is(source.id)), RawStringId.class);
|
||||
assertThat(target).isEqualTo(source);
|
||||
}
|
||||
|
||||
@Test // GH-4026
|
||||
void saveShouldGenerateNewIdOfTypeIfExplicitlyDefined() {
|
||||
|
||||
|
||||
@@ -205,6 +205,15 @@ class QueryOperationsUnitTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test // GH-4184
|
||||
void insertContextDoesNotOverrideExistingId() {
|
||||
|
||||
assertThat(queryOperations.createInsertContext(new Document("_id", "abc")).prepareId(Person.class).getDocument())//
|
||||
.satisfies(result -> {
|
||||
assertThat(result).isEqualTo(new Document("_id", "abc"));
|
||||
});
|
||||
}
|
||||
|
||||
static class Person {
|
||||
|
||||
}
|
||||
|
||||
@@ -218,6 +218,23 @@ public class ReactiveMongoTemplateTests {
|
||||
}).verifyComplete();
|
||||
}
|
||||
|
||||
@Test // GH-4184
|
||||
void insertHonorsExistingRawId() {
|
||||
|
||||
MongoTemplateTests.RawStringId source = new MongoTemplateTests.RawStringId();
|
||||
source.id = "abc";
|
||||
source.value = "new value";
|
||||
|
||||
template.insert(source)
|
||||
.then(template.execute(db -> Flux.from(
|
||||
db.getCollection(template.getCollectionName(MongoTemplateTests.RawStringId.class)).find().limit(1).first()))
|
||||
.next())
|
||||
.as(StepVerifier::create).consumeNextWith(result -> {
|
||||
assertThat(result).isNotNull();
|
||||
assertThat(result.get("_id")).isEqualTo("abc");
|
||||
});
|
||||
}
|
||||
|
||||
@Test // DATAMONGO-1444
|
||||
void insertsSimpleEntityCorrectly() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user