Browse Source

Fix `@MongoId` mapping for `insertAll`.

This commit fixes an issue where id properties annotated with MongoId had not been converted into the desired target type when inserting a collection of objects instead a single one.

Resolves: #4944
Original pull request: #4945
4.3.x
Christoph Strobl 8 months ago committed by Mark Paluch
parent
commit
70146522d3
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 5
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java
  2. 13
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java

5
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

@ -1414,7 +1414,10 @@ public class MongoTemplate
maybeEmitEvent(new BeforeSaveEvent<>(initialized, document, collectionName)); maybeEmitEvent(new BeforeSaveEvent<>(initialized, document, collectionName));
initialized = maybeCallBeforeSave(initialized, document, collectionName); initialized = maybeCallBeforeSave(initialized, document, collectionName);
documentList.add(document); MappedDocument mappedDocument = queryOperations.createInsertContext(MappedDocument.of(document))
.prepareId(uninitialized.getClass());
documentList.add(mappedDocument.getDocument());
initializedBatchToSave.add(initialized); initializedBatchToSave.add(initialized);
} }

13
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java

@ -34,6 +34,7 @@ import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.bson.Document;
import org.bson.types.ObjectId; import org.bson.types.ObjectId;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -3109,6 +3110,18 @@ public class MongoTemplateTests {
assertThat(jesse.getId()).isNotNull(); assertThat(jesse.getId()).isNotNull();
} }
@Test // GH-4944
public void insertAllShouldConvertIdToTargetTypeBeforeSave() {
RawStringId walter = new RawStringId();
walter.value = "walter";
RawStringId returned = template.insertAll(List.of(walter)).iterator().next();
org.bson.Document document = template.execute(RawStringId.class, collection -> collection.find().first());
assertThat(returned.id).isEqualTo(document.get("_id"));
}
@Test // DATAMONGO-1208 @Test // DATAMONGO-1208
public void takesSortIntoAccountWhenStreaming() { public void takesSortIntoAccountWhenStreaming() {

Loading…
Cancel
Save