Browse Source

Fix NPE when rendering untyped aggregation operation as part of criteria query.

Resolves: #4687
Original pull request: #4695
pull/4699/head
Christoph Strobl 2 years ago committed by Mark Paluch
parent
commit
cdd4a01391
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 7
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/QueryMapper.java
  2. 9
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java

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

@ -548,8 +548,11 @@ public class QueryMapper { @@ -548,8 +548,11 @@ public class QueryMapper {
}
if (source instanceof AggregationExpression age) {
return age
.toDocument(new RelaxedTypeBasedAggregationOperationContext(entity.getType(), this.mappingContext, this));
if(entity == null) {
return age.toDocument();
}
return age.toDocument(new RelaxedTypeBasedAggregationOperationContext(entity.getType(), this.mappingContext, this));
}
if (source instanceof MongoExpression exr) {

9
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java

@ -1604,6 +1604,15 @@ public class QueryMapperUnitTests { @@ -1604,6 +1604,15 @@ public class QueryMapperUnitTests {
assertThat(mappedObject).isEqualTo("{ $expr : { $expr : { $gt : [ '$foo', '$budget'] } } }");
}
@Test // GH-4687
void usageOfUntypedAggregationShouldRenderOperationsAsIs() {
Query query = query(expr(Expr.valueOf(ComparisonOperators.valueOf("field").greaterThan("budget"))));
org.bson.Document mappedObject = mapper.getMappedObject(query.getQueryObject(),
context.getPersistentEntity(Object.class));
assertThat(mappedObject).isEqualTo("{ $expr : { $expr : { $gt : [ '$field', '$budget'] } } }");
}
@Test // GH-2750
void usesMongoExpressionDocumentAsIsIfItIsNotAnAggregationExpression() {

Loading…
Cancel
Save