From c231794b5a080b2bc002729099b57e1a86bccf08 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 2 Oct 2018 13:09:29 +0200 Subject: [PATCH 1/2] DATAMONGO-2101 - Prepare issue branch --- pom.xml | 2 +- spring-data-mongodb-benchmarks/pom.xml | 2 +- spring-data-mongodb-cross-store/pom.xml | 4 ++-- spring-data-mongodb-distribution/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 40a3f9065d..62abef975f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 2.0.11.BUILD-SNAPSHOT + 2.0.11.DATAMONGO-2101-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index 4615f5b745..696ea82881 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 2.0.11.BUILD-SNAPSHOT + 2.0.11.DATAMONGO-2101-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index 543f4a3393..50d6d6cd49 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 - 2.0.11.BUILD-SNAPSHOT + 2.0.11.DATAMONGO-2101-SNAPSHOT ../pom.xml @@ -50,7 +50,7 @@ org.springframework.data spring-data-mongodb - 2.0.11.BUILD-SNAPSHOT + 2.0.11.DATAMONGO-2101-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 4479138ec1..e4d1fc2b23 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 - 2.0.11.BUILD-SNAPSHOT + 2.0.11.DATAMONGO-2101-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index bb438e0ae2..e169fd0945 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 2.0.11.BUILD-SNAPSHOT + 2.0.11.DATAMONGO-2101-SNAPSHOT ../pom.xml From d0a9409aa67cca83719257dd067f118eb3e39aa7 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 2 Oct 2018 10:39:32 +0200 Subject: [PATCH 2/2] DATAMONGO-2101 - Fix DBObject to GeoJson conversion. Querydsl still wraps MongoDB data in DBObject which causes trouble with the registered converters that deal with Document to entity conversion. Therefore we now try to extract the argument map from the DBObject transferring it to Document in order to have the converters kick in where applicable. --- .../core/convert/MappingMongoConverter.java | 3 ++ .../data/mongodb/repository/Address.java | 52 ++++--------------- ...ongoPredicateExecutorIntegrationTests.java | 19 +++++++ 3 files changed, 32 insertions(+), 42 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index 485d9594d8..ca379e375d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -50,6 +50,7 @@ import org.springframework.data.mongodb.core.mapping.event.AfterConvertEvent; import org.springframework.data.mongodb.core.mapping.event.AfterLoadEvent; import org.springframework.data.mongodb.core.mapping.event.MongoMappingEvent; +import org.springframework.data.mongodb.util.BsonUtils; import org.springframework.data.util.ClassTypeInformation; import org.springframework.data.util.TypeInformation; import org.springframework.lang.Nullable; @@ -207,6 +208,8 @@ private S read(TypeInformation type, @Nullable Bson bson, if (conversions.hasCustomReadTarget(bson.getClass(), rawType)) { return conversionService.convert(bson, rawType); + } else if (bson instanceof DBObject && conversions.hasCustomReadTarget(Document.class, rawType)) { + return conversionService.convert(new Document(BsonUtils.asMap(bson)), rawType); } if (DBObject.class.isAssignableFrom(rawType)) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Address.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Address.java index a03698b142..bdf7df2d44 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Address.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/Address.java @@ -15,18 +15,28 @@ */ package org.springframework.data.mongodb.repository; +import lombok.Getter; +import lombok.Setter; + +import org.springframework.data.mongodb.core.geo.GeoJson; + import com.querydsl.core.annotations.QueryEmbeddable; /** * @author Oliver Gierke + * @author Christoph Strobl */ @QueryEmbeddable +@Getter +@Setter public class Address { private String street; private String zipCode; private String city; + private GeoJson location; + protected Address() { } @@ -41,46 +51,4 @@ public Address(String street, String zipcode, String city) { this.zipCode = zipcode; this.city = city; } - - /** - * @return the street - */ - public String getStreet() { - return street; - } - - /** - * @param street the street to set - */ - public void setStreet(String street) { - this.street = street; - } - - /** - * @return the zipCode - */ - public String getZipCode() { - return zipCode; - } - - /** - * @param zipCode the zipCode to set - */ - public void setZipCode(String zipCode) { - this.zipCode = zipCode; - } - - /** - * @return the city - */ - public String getCity() { - return city; - } - - /** - * @param city the city to set - */ - public void setCity(String city) { - this.city = city; - } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslMongoPredicateExecutorIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslMongoPredicateExecutorIntegrationTests.java index 27bb91ef9e..cb30f86542 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslMongoPredicateExecutorIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/QuerydslMongoPredicateExecutorIntegrationTests.java @@ -28,6 +28,8 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.geo.GeoJsonPoint; +import org.springframework.data.mongodb.repository.Address; import org.springframework.data.mongodb.repository.Person; import org.springframework.data.mongodb.repository.QPerson; import org.springframework.data.mongodb.repository.query.MongoEntityInformation; @@ -99,4 +101,21 @@ public void findOneWithPredicateReturnsOptionalEmptyWhenNoDataFound() { public void findOneWithPredicateThrowsExceptionForNonUniqueResults() { repository.findOne(person.firstname.contains("e")); } + + @Test // DATAMONGO-2101 + public void readEntityWithGeoJsonValue() { + + Address adr1 = new Address("Hauptplatz", "4020", "Linz"); + adr1.setLocation(new GeoJsonPoint(48.3063548, 14.2851337)); + + Person person1 = new Person("Max", "The Mighty"); + person1.setAddress(adr1); + + operations.save(person1); + + List result = new SpringDataMongodbQuery<>(operations, Person.class).where(person.firstname.eq("Max")) + .fetch(); + + assertThat(result).containsExactly(person1); + } }