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 af2e6f1ed..31cf07052 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 @@ -1028,6 +1028,11 @@ public class QueryMapper { try { PropertyPath path = PropertyPath.from(pathExpression.replaceAll("\\.\\d+", ""), entity.getTypeInformation()); + + if (isPathToJavaLangClassProperty(path)) { + return null; + } + PersistentPropertyPath propertyPath = mappingContext.getPersistentPropertyPath(path); Iterator iterator = propertyPath.iterator(); @@ -1053,6 +1058,14 @@ public class QueryMapper { } } + private boolean isPathToJavaLangClassProperty(PropertyPath path) { + + if (path.getType().equals(Class.class) && path.getLeafProperty().getOwningType().getType().equals(Class.class)) { + return true; + } + return false; + } + /** * Return the {@link Converter} to be used to created the mapped key. Default implementation will use * {@link PropertyToFieldNameConverter}. diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java index 6272dd0ea..1c0262900 100755 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java @@ -810,6 +810,15 @@ public class QueryMapperUnitTests { assertThat(mappedObject).containsEntry("className", "foo"); } + @Test // DATAMONGO-2168 + public void getMappedObjectShouldIgnorePathsLeadingToJavaLangClassProperties/* like Class#getName() */() { + + org.bson.Document update = new org.bson.Document("className", "foo"); + org.bson.Document mappedObject = mapper.getMappedObject(update, context.getPersistentEntity(UserEntity.class)); + + assertThat(mappedObject).containsEntry("className", "foo"); + } + @Document public class Foo { @Id private ObjectId id; @@ -855,7 +864,7 @@ public class QueryMapperUnitTests { class UserEntity { String id; - List publishers = new ArrayList(); + List publishers = new ArrayList<>(); } class CustomizedField {