Browse Source

Polishing.

Initialize MongoId also for reactive insertAll(…).

See: #4944
Original pull request: #4945
pull/4955/head
Mark Paluch 8 months ago committed by Christoph Strobl
parent
commit
985bb8bfa5
No known key found for this signature in database
GPG Key ID: E6054036D0C37A4B
  1. 11
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java
  2. 15
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java

11
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java

@ -1434,11 +1434,16 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati @@ -1434,11 +1434,16 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
entity.assertUpdateableIdIfNotSet();
T initialized = entity.initializeVersionProperty();
Document dbDoc = entity.toMappedDocument(writer).getDocument();
MappedDocument mapped = entity.toMappedDocument(writer);
maybeEmitEvent(new BeforeSaveEvent<>(initialized, dbDoc, collectionName));
maybeEmitEvent(new BeforeSaveEvent<>(initialized, mapped.getDocument(), collectionName));
return maybeCallBeforeSave(initialized, mapped.getDocument(), collectionName).map(toSave -> {
return maybeCallBeforeSave(initialized, dbDoc, collectionName).thenReturn(Tuples.of(entity, dbDoc));
MappedDocument mappedDocument = queryOperations.createInsertContext(mapped)
.prepareId(uninitialized.getClass());
return Tuples.of(entity, mappedDocument.getDocument());
});
});
}).collectList();

15
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java

@ -48,6 +48,7 @@ import org.junit.jupiter.api.BeforeEach; @@ -48,6 +48,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.dao.DataIntegrityViolationException;
@ -84,6 +85,7 @@ import org.springframework.data.mongodb.test.util.ReactiveMongoTestTemplate; @@ -84,6 +85,7 @@ import org.springframework.data.mongodb.test.util.ReactiveMongoTestTemplate;
import com.mongodb.WriteConcern;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoCollection;
/**
* Integration test for {@link MongoTemplate}.
@ -165,6 +167,19 @@ public class ReactiveMongoTemplateTests { @@ -165,6 +167,19 @@ public class ReactiveMongoTemplateTests {
assertThat(person.getId()).isNotNull();
}
@Test // GH-4944
void insertAllShouldConvertIdToTargetTypeBeforeSave() {
RawStringId walter = new RawStringId();
walter.value = "walter";
RawStringId returned = template.insertAll(List.of(walter)).blockLast();
template.execute(RawStringId.class, MongoCollection::find) //
.as(StepVerifier::create) //
.consumeNextWith(actual -> assertThat(returned.id).isEqualTo(actual.get("_id"))) //
.verifyComplete();
}
@Test // DATAMONGO-1444
void saveSetsId() {

Loading…
Cancel
Save