From 4a5789d67e03fb72d0e9e6c62ed9b5f4ac3dccb1 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Mon, 4 Oct 2021 10:18:47 +0200 Subject: [PATCH] `DocumentReference` should consider `Reference` annotations. Closes #3851 Original pull request: #3852. --- .../core/convert/MappingMongoConverter.java | 2 +- .../MappingMongoConverterUnitTests.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index 8a4fece21..fa8b4c964 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -828,7 +828,7 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App return; } - if (prop.isAssociation()) { + if (prop.isAssociation() && prop.isAnnotationPresent(Reference.class)) { accessor.put(prop, new DocumentPointerFactory(conversionService, mappingContext) .computePointer(mappingContext, prop, obj, valueType.getType()).getPointer()); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java index ca94ac6e3..d4c735fd2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java @@ -2614,7 +2614,26 @@ class MappingMongoConverterUnitTests { ClassWithMapProperty target = converter.read(ClassWithMapProperty.class, source); assertThat(target.mapOfObjects).containsEntry("simple",1); + } + @Test // GH-3851 + void associationMappingShouldFallBackToDefaultIfNoAtReferenceAnnotationPresent/* as done via jmolecules */() { + + UUID id = UUID.randomUUID(); + Person sourceValue = new Person(); + sourceValue.id = id.toString(); + + DocumentAccessor accessor = new DocumentAccessor(new org.bson.Document()); + MongoPersistentProperty persistentProperty = mock(MongoPersistentProperty.class); + when(persistentProperty.isAssociation()).thenReturn(true); + when(persistentProperty.getFieldName()).thenReturn("pName"); + doReturn(ClassTypeInformation.from(Person.class)).when(persistentProperty).getTypeInformation(); + doReturn(Person.class).when(persistentProperty).getType(); + doReturn(Person.class).when(persistentProperty).getRawType(); + + converter.writePropertyInternal(sourceValue, accessor, persistentProperty); + + assertThat(accessor.getDocument()).isEqualTo(new org.bson.Document("pName", new org.bson.Document("_id", id.toString()))); } static class GenericType {