Skip to content

Commit 7390716

Browse files
committed
Polishing.
Initialize MongoId also for reactive insertAll(…). See: #4944 Original pull request: #4945
1 parent 6c4d490 commit 7390716

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

Diff for: spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -1434,11 +1434,16 @@ protected <T> Flux<T> doInsertBatch(String collectionName, Collection<? extends
14341434
entity.assertUpdateableIdIfNotSet();
14351435

14361436
T initialized = entity.initializeVersionProperty();
1437-
Document dbDoc = entity.toMappedDocument(writer).getDocument();
1437+
MappedDocument mapped = entity.toMappedDocument(writer);
14381438

1439-
maybeEmitEvent(new BeforeSaveEvent<>(initialized, dbDoc, collectionName));
1439+
maybeEmitEvent(new BeforeSaveEvent<>(initialized, mapped.getDocument(), collectionName));
1440+
return maybeCallBeforeSave(initialized, mapped.getDocument(), collectionName).map(toSave -> {
14401441

1441-
return maybeCallBeforeSave(initialized, dbDoc, collectionName).thenReturn(Tuples.of(entity, dbDoc));
1442+
MappedDocument mappedDocument = queryOperations.createInsertContext(mapped)
1443+
.prepareId(uninitialized.getClass());
1444+
1445+
return Tuples.of(entity, mappedDocument.getDocument());
1446+
});
14421447
});
14431448
}).collectList();
14441449

Diff for: spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java

+15
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.junit.jupiter.api.Disabled;
4949
import org.junit.jupiter.api.Test;
5050
import org.junit.jupiter.api.extension.ExtendWith;
51+
5152
import org.springframework.context.ConfigurableApplicationContext;
5253
import org.springframework.context.support.GenericApplicationContext;
5354
import org.springframework.dao.DataIntegrityViolationException;
@@ -84,6 +85,7 @@
8485

8586
import com.mongodb.WriteConcern;
8687
import com.mongodb.reactivestreams.client.MongoClient;
88+
import com.mongodb.reactivestreams.client.MongoCollection;
8789

8890
/**
8991
* Integration test for {@link MongoTemplate}.
@@ -165,6 +167,19 @@ void insertCollectionSetsId() {
165167
assertThat(person.getId()).isNotNull();
166168
}
167169

170+
@Test // GH-4944
171+
void insertAllShouldConvertIdToTargetTypeBeforeSave() {
172+
173+
RawStringId walter = new RawStringId();
174+
walter.value = "walter";
175+
176+
RawStringId returned = template.insertAll(List.of(walter)).blockLast();
177+
template.execute(RawStringId.class, MongoCollection::find) //
178+
.as(StepVerifier::create) //
179+
.consumeNextWith(actual -> assertThat(returned.id).isEqualTo(actual.get("_id"))) //
180+
.verifyComplete();
181+
}
182+
168183
@Test // DATAMONGO-1444
169184
void saveSetsId() {
170185

0 commit comments

Comments
 (0)