diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java index 87c637739..a7d4e920e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java @@ -540,7 +540,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { return false; } - return path.contains(this.path); + return path.equals(this.path) || path.contains(this.path + ".") || path.contains("." + this.path); } } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java index 45b110e13..e7966e817 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java @@ -812,6 +812,32 @@ public class MongoPersistentEntityIndexResolverUnitTests { assertThat((String) indexDefinitions.get(0).getIndexOptions().get("name"), equalTo("property_index")); } + /** + * @see DATAMONGO-1087 + */ + @Test + public void shouldAllowMultiplePropertiesOfSameTypeWithMatchingStartLettersOnRoot() { + + List indexDefinitions = prepareMappingContextAndResolveIndexForType(MultiplePropertiesOfSameTypeWithMatchingStartLetters.class); + + assertThat(indexDefinitions, hasSize(2)); + assertThat((String) indexDefinitions.get(0).getIndexOptions().get("name"), equalTo("name.component")); + assertThat((String) indexDefinitions.get(1).getIndexOptions().get("name"), equalTo("nameLast.component")); + } + + /** + * @see DATAMONGO-1087 + */ + @Test + public void shouldAllowMultiplePropertiesOfSameTypeWithMatchingStartLettersOnNestedProperty() { + + List indexDefinitions = prepareMappingContextAndResolveIndexForType(MultiplePropertiesOfSameTypeWithMatchingStartLettersOnNestedProperty.class); + + assertThat(indexDefinitions, hasSize(2)); + assertThat((String) indexDefinitions.get(0).getIndexOptions().get("name"), equalTo("component.nameLast")); + assertThat((String) indexDefinitions.get(1).getIndexOptions().get("name"), equalTo("component.name")); + } + @Document static class MixedIndexRoot { @@ -952,6 +978,30 @@ public class MongoPersistentEntityIndexResolverUnitTests { TypeWithNamedIndex propertyOfTypeHavingNamedIndex; } + @Document + public class MultiplePropertiesOfSameTypeWithMatchingStartLetters { + + public class NameComponent { + + @Indexed String component; + } + + NameComponent name; + NameComponent nameLast; + } + + @Document + public class MultiplePropertiesOfSameTypeWithMatchingStartLettersOnNestedProperty { + + public class NameComponent { + + @Indexed String nameLast; + @Indexed String name; + } + + NameComponent component; + } + } private static List prepareMappingContextAndResolveIndexForType(Class type) {