From 6ef74a8a1807bc32b93bdd110bcf87641df07ad9 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Mon, 6 Oct 2014 14:27:14 +0200 Subject: [PATCH 1/2] DATAMONGO-1063 - Fix QueryDSL any().in() throwing Exception. Prepare issue branch. --- pom.xml | 2 +- spring-data-mongodb-cross-store/pom.xml | 4 ++-- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb-log4j/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 75745189ed..ae4bcb7540 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1063-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index 40e8a0f253..db8a4cf648 100644 --- a/spring-data-mongodb-cross-store/pom.xml +++ b/spring-data-mongodb-cross-store/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1063-SNAPSHOT ../pom.xml @@ -48,7 +48,7 @@ org.springframework.data spring-data-mongodb - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1063-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 13110137b6..ac039cec32 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1063-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml index 6ff09e4577..7cd9483493 100644 --- a/spring-data-mongodb-log4j/pom.xml +++ b/spring-data-mongodb-log4j/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1063-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index bfcacd66eb..b9a0bdf421 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1063-SNAPSHOT ../pom.xml From 7c7e9760775059917833ca33d812408780f06751 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Mon, 6 Oct 2014 15:33:32 +0200 Subject: [PATCH 2/2] DATAMONGO-1063 - Fix QueryDSL any().in() throwing Exception. Only convert paths that point to either property or variable. --- .../support/SpringDataMongodbSerializer.java | 9 +++++-- .../data/mongodb/repository/Person.java | 10 +++++++ .../QuerydslRepositorySupportUnitTests.java | 26 ++++++++++++++++--- 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java index 92f6c0d3f8..96464be95e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java @@ -15,6 +15,9 @@ */ package org.springframework.data.mongodb.repository.support; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import java.util.regex.Pattern; import org.springframework.data.mapping.context.MappingContext; @@ -41,7 +44,9 @@ */ class SpringDataMongodbSerializer extends MongodbSerializer { - private final String ID_KEY = "_id"; + private static final String ID_KEY = "_id"; + private static final Set PATH_TYPES = new HashSet(Arrays.asList(PathType.VARIABLE, + PathType.PROPERTY)); private final MongoConverter converter; private final MappingContext, MongoPersistentProperty> mappingContext; @@ -138,7 +143,7 @@ private MongoPersistentProperty getPropertyFor(Path path) { Path parent = path.getMetadata().getParent(); - if (parent == null) { + if (parent == null || !PATH_TYPES.contains(path.getMetadata().getPathType())) { return null; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Person.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Person.java index 3186d78396..689b2e4558 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Person.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Person.java @@ -46,6 +46,8 @@ public enum Sex { @SuppressWarnings("unused") private Sex sex; Date createdAt; + List skills; + @GeoSpatialIndexed private Point location; private Address address; @@ -271,6 +273,14 @@ public void setCreator(User creator) { this.creator = creator; } + public void setSkills(List skills) { + this.skills = skills; + } + + public List getSkills() { + return skills; + } + /* * (non-Javadoc) * diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupportUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupportUnitTests.java index 888c682bed..6c272dfe84 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupportUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupportUnitTests.java @@ -18,6 +18,8 @@ import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; +import java.util.Arrays; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -40,8 +42,7 @@ @ContextConfiguration("classpath:infrastructure.xml") public class QuerydslRepositorySupportUnitTests { - @Autowired - MongoOperations operations; + @Autowired MongoOperations operations; Person person; @Before @@ -54,9 +55,26 @@ public void setUp() { @Test public void providesMongoQuery() { QPerson p = QPerson.person; - QuerydslRepositorySupport support = new QuerydslRepositorySupport(operations) { - }; + QuerydslRepositorySupport support = new QuerydslRepositorySupport(operations) {}; MongodbQuery query = support.from(p).where(p.lastname.eq("Matthews")); assertThat(query.uniqueResult(), is(person)); } + + /** + * @see DATAMONGO-1063 + */ + @Test + public void shouldAllowAny() { + + person.setSkills(Arrays.asList("vocalist", "songwriter", "guitarist")); + + operations.save(person); + + QPerson p = QPerson.person; + QuerydslRepositorySupport support = new QuerydslRepositorySupport(operations) {}; + + MongodbQuery query = support.from(p).where(p.skills.any().in("guitarist")); + + assertThat(query.uniqueResult(), is(person)); + } }