Skip to content

Commit a6728f8

Browse files
christophstroblodrotbohm
authored andcommitted
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.
1 parent 81a7515 commit a6728f8

File tree

3 files changed

+47
-6
lines changed

3 files changed

+47
-6
lines changed

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
*/
1616
package org.springframework.data.mongodb.repository.support;
1717

18+
import java.util.Collections;
19+
import java.util.HashSet;
20+
import java.util.Set;
1821
import java.util.regex.Pattern;
1922

2023
import org.springframework.data.mapping.context.MappingContext;
@@ -41,7 +44,17 @@
4144
*/
4245
class SpringDataMongodbSerializer extends MongodbSerializer {
4346

44-
private final String ID_KEY = "_id";
47+
private static final String ID_KEY = "_id";
48+
private static final Set<PathType> PATH_TYPES;
49+
50+
static {
51+
52+
Set<PathType> pathTypes = new HashSet<PathType>();
53+
pathTypes.add(PathType.VARIABLE);
54+
pathTypes.add(PathType.PROPERTY);
55+
56+
PATH_TYPES = Collections.unmodifiableSet(pathTypes);
57+
}
4558

4659
private final MongoConverter converter;
4760
private final MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext;
@@ -138,7 +151,7 @@ private MongoPersistentProperty getPropertyFor(Path<?> path) {
138151

139152
Path<?> parent = path.getMetadata().getParent();
140153

141-
if (parent == null) {
154+
if (parent == null || !PATH_TYPES.contains(path.getMetadata().getPathType())) {
142155
return null;
143156
}
144157

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public enum Sex {
4646
@SuppressWarnings("unused") private Sex sex;
4747
Date createdAt;
4848

49+
List<String> skills;
50+
4951
@GeoSpatialIndexed private Point location;
5052

5153
private Address address;
@@ -271,6 +273,14 @@ public void setCreator(User creator) {
271273
this.creator = creator;
272274
}
273275

276+
public void setSkills(List<String> skills) {
277+
this.skills = skills;
278+
}
279+
280+
public List<String> getSkills() {
281+
return skills;
282+
}
283+
274284
/*
275285
* (non-Javadoc)
276286
*

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import static org.hamcrest.CoreMatchers.*;
1919
import static org.junit.Assert.*;
2020

21+
import java.util.Arrays;
22+
2123
import org.junit.Before;
2224
import org.junit.Test;
2325
import org.junit.runner.RunWith;
@@ -40,8 +42,7 @@
4042
@ContextConfiguration("classpath:infrastructure.xml")
4143
public class QuerydslRepositorySupportUnitTests {
4244

43-
@Autowired
44-
MongoOperations operations;
45+
@Autowired MongoOperations operations;
4546
Person person;
4647

4748
@Before
@@ -54,9 +55,26 @@ public void setUp() {
5455
@Test
5556
public void providesMongoQuery() {
5657
QPerson p = QPerson.person;
57-
QuerydslRepositorySupport support = new QuerydslRepositorySupport(operations) {
58-
};
58+
QuerydslRepositorySupport support = new QuerydslRepositorySupport(operations) {};
5959
MongodbQuery<Person> query = support.from(p).where(p.lastname.eq("Matthews"));
6060
assertThat(query.uniqueResult(), is(person));
6161
}
62+
63+
/**
64+
* @see DATAMONGO-1063
65+
*/
66+
@Test
67+
public void shouldAllowAny() {
68+
69+
person.setSkills(Arrays.asList("vocalist", "songwriter", "guitarist"));
70+
71+
operations.save(person);
72+
73+
QPerson p = QPerson.person;
74+
QuerydslRepositorySupport support = new QuerydslRepositorySupport(operations) {};
75+
76+
MongodbQuery<Person> query = support.from(p).where(p.skills.any().in("guitarist"));
77+
78+
assertThat(query.uniqueResult(), is(person));
79+
}
6280
}

0 commit comments

Comments
 (0)