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 8aa2a30e6..b1f984a3e 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 @@ -33,7 +33,6 @@ import org.bson.BsonValue; import org.bson.Document; import org.bson.conversions.Bson; import org.bson.types.ObjectId; - import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.converter.Converter; import org.springframework.data.domain.Example; @@ -1099,6 +1098,11 @@ public class QueryMapper { private PropertyPath forName(String path) { try { + + if (entity.getPersistentProperty(path) != null) { + return PropertyPath.from(Pattern.quote(path), entity.getTypeInformation()); + } + return PropertyPath.from(path, entity.getTypeInformation()); } catch (PropertyReferenceException | InvalidPersistentPropertyPath e) { 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 473003db7..d1fd28622 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 @@ -881,6 +881,15 @@ public class QueryMapperUnitTests { assertThat(document).isEqualTo(new org.bson.Document("scripts", new Code(script))); } + @Test // DATAMONGO-2339 + public void findByIdUsesMappedIdFieldNameWithUnderscoreCorrectly() { + + org.bson.Document target = mapper.getMappedObject(new org.bson.Document("with_underscore", "id-1"), + context.getPersistentEntity(WithIdPropertyContainingUnderscore.class)); + + assertThat(target).isEqualTo(new org.bson.Document("_id", "id-1")); + } + @Document public class Foo { @Id private ObjectId id; @@ -1013,4 +1022,8 @@ public class QueryMapperUnitTests { @Field(targetType = FieldType.SCRIPT) // List scripts; } + + static class WithIdPropertyContainingUnderscore { + @Id String with_underscore; + } }