Browse Source

DATAMONGO-1063 - Fix application of Querydsl'S any().in() throwing Exception.

We now only convert paths that point to either a property or variable.

Original pull request: #230.
pull/232/head
Christoph Strobl 11 years ago committed by Oliver Gierke
parent
commit
17c342895a
  1. 17
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java
  2. 10
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Person.java
  3. 26
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupportUnitTests.java

17
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java

@ -15,6 +15,9 @@ @@ -15,6 +15,9 @@
*/
package org.springframework.data.mongodb.repository.support;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
import org.springframework.data.mapping.context.MappingContext;
@ -41,7 +44,17 @@ import com.mysema.query.types.PathType; @@ -41,7 +44,17 @@ import com.mysema.query.types.PathType;
*/
class SpringDataMongodbSerializer extends MongodbSerializer {
private final String ID_KEY = "_id";
private static final String ID_KEY = "_id";
private static final Set<PathType> PATH_TYPES;
static {
Set<PathType> pathTypes = new HashSet<PathType>();
pathTypes.add(PathType.VARIABLE);
pathTypes.add(PathType.PROPERTY);
PATH_TYPES = Collections.unmodifiableSet(pathTypes);
}
private final MongoConverter converter;
private final MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext;
@ -138,7 +151,7 @@ class SpringDataMongodbSerializer extends MongodbSerializer { @@ -138,7 +151,7 @@ class SpringDataMongodbSerializer extends MongodbSerializer {
Path<?> parent = path.getMetadata().getParent();
if (parent == null) {
if (parent == null || !PATH_TYPES.contains(path.getMetadata().getPathType())) {
return null;
}

10
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Person.java

@ -46,6 +46,8 @@ public class Person extends Contact { @@ -46,6 +46,8 @@ public class Person extends Contact {
@SuppressWarnings("unused") private Sex sex;
Date createdAt;
List<String> skills;
@GeoSpatialIndexed private Point location;
private Address address;
@ -271,6 +273,14 @@ public class Person extends Contact { @@ -271,6 +273,14 @@ public class Person extends Contact {
this.creator = creator;
}
public void setSkills(List<String> skills) {
this.skills = skills;
}
public List<String> getSkills() {
return skills;
}
/*
* (non-Javadoc)
*

26
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupportUnitTests.java

@ -18,6 +18,8 @@ package org.springframework.data.mongodb.repository.support; @@ -18,6 +18,8 @@ package org.springframework.data.mongodb.repository.support;
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 @@ import com.mysema.query.mongodb.MongodbQuery; @@ -40,8 +42,7 @@ import com.mysema.query.mongodb.MongodbQuery;
@ContextConfiguration("classpath:infrastructure.xml")
public class QuerydslRepositorySupportUnitTests {
@Autowired
MongoOperations operations;
@Autowired MongoOperations operations;
Person person;
@Before
@ -54,9 +55,26 @@ public class QuerydslRepositorySupportUnitTests { @@ -54,9 +55,26 @@ public class QuerydslRepositorySupportUnitTests {
@Test
public void providesMongoQuery() {
QPerson p = QPerson.person;
QuerydslRepositorySupport support = new QuerydslRepositorySupport(operations) {
};
QuerydslRepositorySupport support = new QuerydslRepositorySupport(operations) {};
MongodbQuery<Person> 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<Person> query = support.from(p).where(p.skills.any().in("guitarist"));
assertThat(query.uniqueResult(), is(person));
}
}

Loading…
Cancel
Save