Skip to content

Commit 19a1f75

Browse files
author
Ryan Gibb
committed
Add QueryMapper.getMappedObjectRecurse.
1 parent eda1c79 commit 19a1f75

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
* @author Mark Paluch
7272
* @author David Julia
7373
* @author Divya Srivastava
74+
* @author Ryan Gibb
7475
*/
7576
public class QueryMapper {
7677

@@ -120,6 +121,15 @@ public Document getMappedObject(Bson query, Optional<? extends MongoPersistentEn
120121
*/
121122
@SuppressWarnings("deprecation")
122123
public Document getMappedObject(Bson query, @Nullable MongoPersistentEntity<?> entity) {
124+
return getMappedObjectRecurse(query, entity);
125+
}
126+
127+
protected Document getMappedObjectRecurse(Bson query, Optional<? extends MongoPersistentEntity<?>> entity) {
128+
return getMappedObjectRecurse(query, entity.orElse(null));
129+
}
130+
131+
@SuppressWarnings("deprecation")
132+
protected Document getMappedObjectRecurse(Bson query, @Nullable MongoPersistentEntity<?> entity) {
123133

124134
if (isNestedKeyword(query)) {
125135
return getMappedKeyword(new Keyword(query), entity);
@@ -317,7 +327,7 @@ protected Entry<String, Object> getMappedObjectForField(Field field, Object rawV
317327
Object value;
318328

319329
if (rawValue instanceof MongoExpression) {
320-
return createMapEntry(key, getMappedObject(((MongoExpression) rawValue).toDocument(), field.getEntity()));
330+
return createMapEntry(key, getMappedObjectRecurse(((MongoExpression) rawValue).toDocument(), field.getEntity()));
321331
}
322332

323333
if (isNestedKeyword(rawValue) && !field.isIdField()) {
@@ -366,7 +376,7 @@ protected Document getMappedKeyword(Keyword keyword, @Nullable MongoPersistentEn
366376
List<Object> newConditions = new ArrayList<>();
367377

368378
for (Object condition : conditions) {
369-
newConditions.add(isDocument(condition) ? getMappedObject((Document) condition, entity)
379+
newConditions.add(isDocument(condition) ? getMappedObjectRecurse((Document) condition, entity)
370380
: convertSimpleOrDocument(condition, entity));
371381
}
372382

@@ -437,7 +447,7 @@ protected Object getMappedValue(Field documentField, Object sourceValue) {
437447
} else if (valueDbo.containsField("$ne")) {
438448
resultDbo.put("$ne", convertId(valueDbo.get("$ne"), getIdTypeForField(documentField)));
439449
} else {
440-
return getMappedObject(resultDbo, Optional.empty());
450+
return getMappedObjectRecurse(resultDbo, Optional.empty());
441451
}
442452
return resultDbo;
443453
}
@@ -456,7 +466,7 @@ else if (isDocument(value)) {
456466
} else if (valueDbo.containsKey("$ne")) {
457467
resultDbo.put("$ne", convertId(valueDbo.get("$ne"), getIdTypeForField(documentField)));
458468
} else {
459-
return getMappedObject(resultDbo, Optional.empty());
469+
return getMappedObjectRecurse(resultDbo, Optional.empty());
460470
}
461471
return resultDbo;
462472

@@ -542,15 +552,15 @@ protected Object convertSimpleOrDocument(Object source, @Nullable MongoPersisten
542552
}
543553

544554
if (isDocument(source)) {
545-
return getMappedObject((Document) source, entity);
555+
return getMappedObjectRecurse((Document) source, entity);
546556
}
547557

548558
if (source instanceof BasicDBList) {
549559
return delegateConvertToMongoType(source, entity);
550560
}
551561

552562
if (isDBObject(source)) {
553-
return getMappedObject((BasicDBObject) source, entity);
563+
return getMappedObjectRecurse((BasicDBObject) source, entity);
554564
}
555565

556566
if (source instanceof BsonValue) {
@@ -566,7 +576,7 @@ protected Object convertSimpleOrDocument(Object source, @Nullable MongoPersisten
566576
String key = ObjectUtils.nullSafeToString(converter.convertToMongoType(it.getKey()));
567577

568578
if (it.getValue() instanceof Document) {
569-
map.put(key, getMappedObject((Document) it.getValue(), entity));
579+
map.put(key, getMappedObjectRecurse((Document) it.getValue(), entity));
570580
} else {
571581
map.put(key, delegateConvertToMongoType(it.getValue(), entity));
572582
}

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/UpdateMapper.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
* @author Oliver Gierke
4343
* @author Christoph Strobl
4444
* @author Mark Paluch
45+
* @author Ryan Gibb
4546
*/
4647
public class UpdateMapper extends QueryMapper {
4748

@@ -63,9 +64,9 @@ public UpdateMapper(MongoConverter converter) {
6364
* @see org.springframework.data.mongodb.core.convert.QueryMapper#getMappedObject(Bson, MongoPersistentEntity)
6465
*/
6566
@Override
66-
public Document getMappedObject(Bson query, @Nullable MongoPersistentEntity<?> entity) {
67+
protected Document getMappedObjectRecurse(Bson query, @Nullable MongoPersistentEntity<?> entity) {
6768

68-
Document document = super.getMappedObject(query, entity);
69+
Document document = super.getMappedObjectRecurse(query, entity);
6970

7071
boolean hasOperators = false;
7172
boolean hasFields = false;
@@ -156,7 +157,7 @@ protected Entry<String, Object> getMappedObjectForField(Field field, Object rawV
156157

157158
if (isQuery(rawValue)) {
158159
return createMapEntry(field,
159-
super.getMappedObject(((Query) rawValue).getQueryObject(), field.getPropertyEntity()));
160+
super.getMappedObjectRecurse(((Query) rawValue).getQueryObject(), field.getPropertyEntity()));
160161
}
161162

162163
if (isUpdateModifier(rawValue)) {

0 commit comments

Comments
 (0)