Skip to content

Commit 471d3ca

Browse files
mp911dechristophstrobl
authored andcommitted
Polishing.
Initialize MongoId also for reactive insertAll(…). See: #4944 Original pull request: #4945
1 parent a916735 commit 471d3ca

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
@@ -1450,11 +1450,16 @@ protected <T> Flux<T> doInsertBatch(String collectionName, Collection<? extends
14501450
entity.assertUpdateableIdIfNotSet();
14511451

14521452
T initialized = entity.initializeVersionProperty();
1453-
Document dbDoc = entity.toMappedDocument(writer).getDocument();
1453+
MappedDocument mapped = entity.toMappedDocument(writer);
14541454

1455-
maybeEmitEvent(new BeforeSaveEvent<>(initialized, dbDoc, collectionName));
1455+
maybeEmitEvent(new BeforeSaveEvent<>(initialized, mapped.getDocument(), collectionName));
1456+
return maybeCallBeforeSave(initialized, mapped.getDocument(), collectionName).map(toSave -> {
14561457

1457-
return maybeCallBeforeSave(initialized, dbDoc, collectionName).thenReturn(Tuples.of(entity, dbDoc));
1458+
MappedDocument mappedDocument = queryOperations.createInsertContext(mapped)
1459+
.prepareId(uninitialized.getClass());
1460+
1461+
return Tuples.of(entity, mappedDocument.getDocument());
1462+
});
14581463
});
14591464
}).collectList();
14601465

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)