diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java index e8578a8bf..3a10a6c9a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java @@ -982,6 +982,7 @@ public class QueryMapper { * @param pathExpression * @return */ + @Nullable private PersistentPropertyPath getPath(String pathExpression) { try { @@ -1007,7 +1008,7 @@ public class QueryMapper { } return propertyPath; - } catch (PropertyReferenceException e) { + } catch (PropertyReferenceException | InvalidPersistentPropertyPath e) { return null; } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java index 4618af1bd..36306042c 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java @@ -20,6 +20,7 @@ import static org.springframework.data.mongodb.core.DocumentTestUtils.*; import static org.springframework.data.mongodb.test.util.Assertions.*; import lombok.AllArgsConstructor; +import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDate; @@ -979,6 +980,15 @@ public class UpdateMapperUnitTests { .doesNotContainKey("$set.concreteInnerList.[0]._class"); } + @Test // DATAMONGO-2174 + public void mappingUpdateDocumentWithExplicitFieldNameShouldBePossible() { + + Document mappedUpdate = mapper.getMappedObject(new Document("AValue", "a value"), + context.getPersistentEntity(TypeWithFieldNameThatCannotBeDecapitalized.class)); + + assertThat(mappedUpdate).isEqualTo(new Document("AValue", "a value")); + } + static class DomainTypeWrappingConcreteyTypeHavingListOfInterfaceTypeAttributes { ListModelWrapper concreteTypeWithListAttributeOfInterfaceType; } @@ -1291,4 +1301,15 @@ public class UpdateMapperUnitTests { String value; } + @Data + static class TypeWithFieldNameThatCannotBeDecapitalized { + + @Id + protected String id; + + @Field("AValue") + private Long aValue = 0L; + + } + }