From a40a3b60c60ff9622769f026b335123e1275c321 Mon Sep 17 00:00:00 2001 From: kkrzywanski Date: Mon, 5 May 2025 12:56:32 +0200 Subject: [PATCH 1/7] ISSUE #1060 - step 1 - change org.mongodb.morphia to dev.morphia.morphia --- pom.xml | 4 ++-- querydsl-libraries/pom.xml | 2 +- querydsl-libraries/querydsl-mongodb/pom.xml | 13 +++++++++---- .../document/AbstractFetchableMongodbQuery.java | 2 +- .../com/querydsl/mongodb/morphia/MorphiaQuery.java | 8 ++++---- .../mongodb/morphia/MorphiaSerializer.java | 12 ++++++------ .../mongodb/MongodbGeoSpatialQueryTest.java | 4 ++-- .../java/com/querydsl/mongodb/MongodbJoinTest.java | 4 ++-- .../mongodb/MongodbPolymorphicCollectionTest.java | 4 ++-- .../com/querydsl/mongodb/MongodbQueryTest.java | 4 ++-- .../querydsl/mongodb/MongodbSerializerTest.java | 2 +- .../mongodb/document/MongodbQueryTest.java | 14 +++++++------- .../querydsl/mongodb/domain/AbstractEntity.java | 2 +- .../java/com/querydsl/mongodb/domain/Address.java | 2 +- .../java/com/querydsl/mongodb/domain/Chips.java | 2 +- .../java/com/querydsl/mongodb/domain/Country.java | 4 ++-- .../java/com/querydsl/mongodb/domain/Dates.java | 2 +- .../com/querydsl/mongodb/domain/DummyEntity.java | 4 ++-- .../java/com/querydsl/mongodb/domain/Fish.java | 2 +- .../java/com/querydsl/mongodb/domain/Food.java | 2 +- .../com/querydsl/mongodb/domain/GeoEntity.java | 10 +++++----- .../java/com/querydsl/mongodb/domain/Item.java | 2 +- .../querydsl/mongodb/domain/LocaleConverter.java | 8 ++++---- .../com/querydsl/mongodb/domain/MapEntity.java | 4 ++-- .../querydsl/mongodb/domain/MongodbUserTest.java | 6 +++--- .../java/com/querydsl/mongodb/domain/Person.java | 4 ++-- .../java/com/querydsl/mongodb/domain/User.java | 6 +++--- .../java/com/querydsl/mongodb/domain2/User.java | 4 ++-- .../querydsl/mongodb/domain2/UserAttribute.java | 2 +- querydsl-tooling/querydsl-apt/pom.xml | 4 ++-- .../apt/morphia/MorphiaAnnotationProcessor.java | 8 ++++---- 31 files changed, 78 insertions(+), 73 deletions(-) diff --git a/pom.xml b/pom.xml index eb987d6b6a..f3b52a2f8e 100644 --- a/pom.xml +++ b/pom.xml @@ -120,7 +120,7 @@ 3.49.1.0 13.10.00.35 5.0.7.java11 - 3.12.14 + 4.1.1 1.0.0.RELEASE @@ -141,7 +141,7 @@ 3.5.3 1.24 2.2.3 - 1.3.2 + 1.6.1 1.37 2.1.20 2.1.20-2.0.1 diff --git a/querydsl-libraries/pom.xml b/querydsl-libraries/pom.xml index 3968e36ad3..b11b04f077 100644 --- a/querydsl-libraries/pom.xml +++ b/querydsl-libraries/pom.xml @@ -100,7 +100,7 @@ org.eclipse.persistence:eclipselink:*:*:compile org.datanucleus:javax.jdo:*:*:compile org.springframework.roo:org.springframework.roo.annotations:*:*:compile - org.mongodb.morphia:morphia:*:*:compile + dev.morphia:core:*:*:compile org.joda:joda-money:*:*:compile org.batoo.jpa:batoo-jpa:*:*:compile jakarta.annotation:jakarta.annotation-api:*:*:compile diff --git a/querydsl-libraries/querydsl-mongodb/pom.xml b/querydsl-libraries/querydsl-mongodb/pom.xml index 40c30d5060..303512097c 100644 --- a/querydsl-libraries/querydsl-mongodb/pom.xml +++ b/querydsl-libraries/querydsl-mongodb/pom.xml @@ -14,7 +14,7 @@ com.mongodb;version="0.0.0", - org.mongodb.morphia.*;version="1.3.2", + dev.morphia.*;version="1.6.1", org.bson.*;version="0.0.0", ${osgi.import.package.root} @@ -27,12 +27,17 @@ org.mongodb - mongo-java-driver + mongodb-driver-sync ${mongodb.version} - org.mongodb.morphia - morphia + org.mongodb + mongodb-driver-legacy + ${mongodb.version} + + + dev.morphia.morphia + core ${morphia.version} provided true diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/document/AbstractFetchableMongodbQuery.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/document/AbstractFetchableMongodbQuery.java index 8d79eb2936..8c44a10de4 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/document/AbstractFetchableMongodbQuery.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/document/AbstractFetchableMongodbQuery.java @@ -227,7 +227,7 @@ public QueryResults fetchResults() { public long fetchCount() { try { Predicate filter = createFilter(getQueryMixin().getMetadata()); - return collection.count(createQuery(filter)); + return collection.countDocuments(createQuery(filter)); } catch (NoResults ex) { return 0L; } diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java index 3bd418d5d8..9a3937f389 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java @@ -18,11 +18,11 @@ import com.mongodb.DBObject; import com.querydsl.core.types.EntityPath; import com.querydsl.mongodb.AbstractMongodbQuery; +import dev.morphia.Datastore; +import dev.morphia.Morphia; +import dev.morphia.mapping.cache.DefaultEntityCache; +import dev.morphia.mapping.cache.EntityCache; import java.util.function.Function; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Morphia; -import org.mongodb.morphia.mapping.cache.DefaultEntityCache; -import org.mongodb.morphia.mapping.cache.EntityCache; /** * {@code MorphiaQuery} extends {@link AbstractMongodbQuery} with Morphia specific transformations diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java index c652b69b6a..10aff4d157 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java @@ -18,12 +18,12 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.mongodb.MongodbSerializer; -import org.mongodb.morphia.Key; -import org.mongodb.morphia.Morphia; -import org.mongodb.morphia.annotations.Id; -import org.mongodb.morphia.annotations.Property; -import org.mongodb.morphia.annotations.Reference; -import org.mongodb.morphia.mapping.Mapper; +import dev.morphia.Key; +import dev.morphia.Morphia; +import dev.morphia.annotations.Id; +import dev.morphia.annotations.Property; +import dev.morphia.annotations.Reference; +import dev.morphia.mapping.Mapper; /** * {@code MorphiaSerializer} extends {@link MongodbSerializer} with Morphia specific annotation diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java index 08fe47e6eb..1c669507cd 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java @@ -22,12 +22,12 @@ import com.querydsl.mongodb.domain.GeoEntity; import com.querydsl.mongodb.domain.QGeoEntity; import com.querydsl.mongodb.morphia.MorphiaQuery; +import dev.morphia.Datastore; +import dev.morphia.Morphia; import java.net.UnknownHostException; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Morphia; @Category(MongoDB.class) public class MongodbGeoSpatialQueryTest { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java index a833c9c104..f8dfeb8d17 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java @@ -10,12 +10,12 @@ import com.querydsl.mongodb.domain.QUser; import com.querydsl.mongodb.domain.User; import com.querydsl.mongodb.morphia.MorphiaQuery; +import dev.morphia.Datastore; +import dev.morphia.Morphia; import java.net.UnknownHostException; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Morphia; @Category(MongoDB.class) public class MongodbJoinTest { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java index 88e77db16f..f5016c8d54 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java @@ -12,12 +12,12 @@ import com.querydsl.mongodb.domain.QFish; import com.querydsl.mongodb.domain.QFood; import com.querydsl.mongodb.morphia.MorphiaQuery; +import dev.morphia.Datastore; +import dev.morphia.Morphia; import java.net.UnknownHostException; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Morphia; @Category(MongoDB.class) public class MongodbPolymorphicCollectionTest { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index d591e042f3..b39a728454 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -40,6 +40,8 @@ import com.querydsl.mongodb.domain.User; import com.querydsl.mongodb.domain.User.Gender; import com.querydsl.mongodb.morphia.MorphiaQuery; +import dev.morphia.Datastore; +import dev.morphia.Morphia; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; @@ -52,8 +54,6 @@ import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Morphia; @Category(MongoDB.class) public class MongodbQueryTest { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java index 9f4dacba12..6c1bccf95c 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java @@ -30,6 +30,7 @@ import com.querydsl.mongodb.domain.QPerson; import com.querydsl.mongodb.domain.QUser; import com.querydsl.mongodb.morphia.MorphiaSerializer; +import dev.morphia.Morphia; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; @@ -38,7 +39,6 @@ import org.bson.types.ObjectId; import org.junit.Before; import org.junit.Test; -import org.mongodb.morphia.Morphia; public class MongodbSerializerTest { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java index 4b7de9d0c4..dab704e6fe 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java @@ -46,6 +46,13 @@ import com.querydsl.mongodb.domain.QUser; import com.querydsl.mongodb.domain.User; import com.querydsl.mongodb.domain.User.Gender; +import dev.morphia.Datastore; +import dev.morphia.Key; +import dev.morphia.Morphia; +import dev.morphia.annotations.Id; +import dev.morphia.annotations.Property; +import dev.morphia.annotations.Reference; +import dev.morphia.mapping.Mapper; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; @@ -59,13 +66,6 @@ import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Key; -import org.mongodb.morphia.Morphia; -import org.mongodb.morphia.annotations.Id; -import org.mongodb.morphia.annotations.Property; -import org.mongodb.morphia.annotations.Reference; -import org.mongodb.morphia.mapping.Mapper; @Category(MongoDB.class) public class MongodbQueryTest { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/AbstractEntity.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/AbstractEntity.java index e974394e62..34241ab043 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/AbstractEntity.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/AbstractEntity.java @@ -1,8 +1,8 @@ package com.querydsl.mongodb.domain; import com.querydsl.core.annotations.QuerySupertype; +import dev.morphia.annotations.Id; import org.bson.types.ObjectId; -import org.mongodb.morphia.annotations.Id; @QuerySupertype public abstract class AbstractEntity { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Address.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Address.java index 8a41aef7c5..2fb4032b72 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Address.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Address.java @@ -13,7 +13,7 @@ */ package com.querydsl.mongodb.domain; -import org.mongodb.morphia.annotations.Embedded; +import dev.morphia.annotations.Embedded; public final class Address { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Chips.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Chips.java index 323a8a2e92..bc48cb9047 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Chips.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Chips.java @@ -13,7 +13,7 @@ */ package com.querydsl.mongodb.domain; -import org.mongodb.morphia.annotations.Entity; +import dev.morphia.annotations.Entity; @Entity("food") public class Chips extends Food { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Country.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Country.java index 026ccf7801..68154f3cca 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Country.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Country.java @@ -1,8 +1,8 @@ package com.querydsl.mongodb.domain; +import dev.morphia.annotations.Converters; +import dev.morphia.annotations.Entity; import java.util.Locale; -import org.mongodb.morphia.annotations.Converters; -import org.mongodb.morphia.annotations.Entity; @Entity @Converters(LocaleConverter.class) diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Dates.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Dates.java index 9a20d2602a..3d7eb41a27 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Dates.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Dates.java @@ -1,7 +1,7 @@ package com.querydsl.mongodb.domain; +import dev.morphia.annotations.Entity; import java.util.Date; -import org.mongodb.morphia.annotations.Entity; @Entity public class Dates extends AbstractEntity { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/DummyEntity.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/DummyEntity.java index 49e3ccee64..5a1344e696 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/DummyEntity.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/DummyEntity.java @@ -13,8 +13,8 @@ */ package com.querydsl.mongodb.domain; -import org.mongodb.morphia.annotations.Entity; -import org.mongodb.morphia.annotations.Property; +import dev.morphia.annotations.Entity; +import dev.morphia.annotations.Property; @Entity public class DummyEntity extends AbstractEntity { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Fish.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Fish.java index 20d8204351..bf936ee4e3 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Fish.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Fish.java @@ -13,7 +13,7 @@ */ package com.querydsl.mongodb.domain; -import org.mongodb.morphia.annotations.Entity; +import dev.morphia.annotations.Entity; @Entity("food") public class Fish extends Food { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Food.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Food.java index d16954c773..c203fd18e8 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Food.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Food.java @@ -13,7 +13,7 @@ */ package com.querydsl.mongodb.domain; -import org.mongodb.morphia.annotations.Entity; +import dev.morphia.annotations.Entity; @Entity("food") public class Food extends AbstractEntity { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/GeoEntity.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/GeoEntity.java index 27a9404e58..69fc457e4e 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/GeoEntity.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/GeoEntity.java @@ -13,11 +13,11 @@ */ package com.querydsl.mongodb.domain; -import org.mongodb.morphia.annotations.Entity; -import org.mongodb.morphia.annotations.Field; -import org.mongodb.morphia.annotations.Index; -import org.mongodb.morphia.annotations.Indexes; -import org.mongodb.morphia.utils.IndexType; +import dev.morphia.annotations.Entity; +import dev.morphia.annotations.Field; +import dev.morphia.annotations.Index; +import dev.morphia.annotations.Indexes; +import dev.morphia.utils.IndexType; @Entity @Indexes({@Index(fields = @Field(value = "location", type = IndexType.GEO2D))}) diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Item.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Item.java index 88ace74c35..d0966cbcfb 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Item.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Item.java @@ -13,9 +13,9 @@ */ package com.querydsl.mongodb.domain; +import dev.morphia.annotations.Entity; import java.util.List; import org.bson.types.ObjectId; -import org.mongodb.morphia.annotations.Entity; @Entity public class Item extends AbstractEntity { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleConverter.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleConverter.java index db459fcffa..a5b8ea32ec 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleConverter.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleConverter.java @@ -1,10 +1,10 @@ package com.querydsl.mongodb.domain; +import dev.morphia.converters.SimpleValueConverter; +import dev.morphia.converters.TypeConverter; +import dev.morphia.mapping.MappedField; +import dev.morphia.mapping.MappingException; import java.util.Locale; -import org.mongodb.morphia.converters.SimpleValueConverter; -import org.mongodb.morphia.converters.TypeConverter; -import org.mongodb.morphia.mapping.MappedField; -import org.mongodb.morphia.mapping.MappingException; public class LocaleConverter extends TypeConverter implements SimpleValueConverter { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MapEntity.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MapEntity.java index b5a0798113..fbd690ffb1 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MapEntity.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MapEntity.java @@ -1,9 +1,9 @@ package com.querydsl.mongodb.domain; +import dev.morphia.annotations.Embedded; +import dev.morphia.annotations.Entity; import java.util.HashMap; import java.util.Map; -import org.mongodb.morphia.annotations.Embedded; -import org.mongodb.morphia.annotations.Entity; @Entity public class MapEntity extends AbstractEntity { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java index 4a03bd8a11..73cb4b0f82 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java @@ -15,9 +15,9 @@ import static org.assertj.core.api.Assertions.assertThat; +import dev.morphia.Morphia; import org.bson.types.ObjectId; import org.junit.Test; -import org.mongodb.morphia.Morphia; public class MongodbUserTest { @@ -38,7 +38,7 @@ public void map() { @Test public void friend() { var friend = new User(); - friend.setId(ObjectId.createFromLegacyFormat(1, 2, 3)); + friend.setId(new ObjectId(1, 2)); var user = new User(); user.setFriend(friend); @@ -49,7 +49,7 @@ public void friend() { @Test public void friends() { var friend = new User(); - friend.setId(ObjectId.createFromLegacyFormat(1, 2, 3)); + friend.setId(new ObjectId(1, 2)); var user = new User(); user.addFriend(friend); diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Person.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Person.java index bf5656e76f..bb2174e124 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Person.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Person.java @@ -1,8 +1,8 @@ package com.querydsl.mongodb.domain; +import dev.morphia.annotations.Entity; +import dev.morphia.annotations.Id; import org.bson.types.ObjectId; -import org.mongodb.morphia.annotations.Entity; -import org.mongodb.morphia.annotations.Id; @Entity class Person { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/User.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/User.java index 846c191919..db5ed289d9 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/User.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/User.java @@ -13,12 +13,12 @@ */ package com.querydsl.mongodb.domain; +import dev.morphia.annotations.Embedded; +import dev.morphia.annotations.Entity; +import dev.morphia.annotations.Reference; import java.util.ArrayList; import java.util.Date; import java.util.List; -import org.mongodb.morphia.annotations.Embedded; -import org.mongodb.morphia.annotations.Entity; -import org.mongodb.morphia.annotations.Reference; @Entity public class User extends AbstractEntity { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/User.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/User.java index 06a61a5d84..a65c6d0fc1 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/User.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/User.java @@ -13,9 +13,9 @@ */ package com.querydsl.mongodb.domain2; +import dev.morphia.annotations.Embedded; +import dev.morphia.annotations.Entity; import java.util.Map; -import org.mongodb.morphia.annotations.Embedded; -import org.mongodb.morphia.annotations.Entity; @Entity(value = "USER", noClassnameStored = true) public class User { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/UserAttribute.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/UserAttribute.java index 203a750469..b8840a37e0 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/UserAttribute.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/UserAttribute.java @@ -13,7 +13,7 @@ */ package com.querydsl.mongodb.domain2; -import org.mongodb.morphia.annotations.Embedded; +import dev.morphia.annotations.Embedded; @Embedded public class UserAttribute { diff --git a/querydsl-tooling/querydsl-apt/pom.xml b/querydsl-tooling/querydsl-apt/pom.xml index 00b830b43f..fc067f4233 100644 --- a/querydsl-tooling/querydsl-apt/pom.xml +++ b/querydsl-tooling/querydsl-apt/pom.xml @@ -60,8 +60,8 @@ - org.mongodb.morphia - morphia + dev.morphia.morphia + core ${morphia.version} provided diff --git a/querydsl-tooling/querydsl-apt/src/main/java/com/querydsl/apt/morphia/MorphiaAnnotationProcessor.java b/querydsl-tooling/querydsl-apt/src/main/java/com/querydsl/apt/morphia/MorphiaAnnotationProcessor.java index 923b8aac94..68c7eed326 100644 --- a/querydsl-tooling/querydsl-apt/src/main/java/com/querydsl/apt/morphia/MorphiaAnnotationProcessor.java +++ b/querydsl-tooling/querydsl-apt/src/main/java/com/querydsl/apt/morphia/MorphiaAnnotationProcessor.java @@ -19,20 +19,20 @@ import com.querydsl.core.annotations.QueryEntities; import com.querydsl.core.annotations.QuerySupertype; import com.querydsl.core.types.Expression; +import dev.morphia.annotations.Embedded; +import dev.morphia.annotations.Entity; +import dev.morphia.annotations.Transient; import java.lang.annotation.Annotation; import java.util.Collections; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; -import org.mongodb.morphia.annotations.Embedded; -import org.mongodb.morphia.annotations.Entity; -import org.mongodb.morphia.annotations.Transient; /** * Annotation processor to create Querydsl query types for Morphia annotated classes * * @author tiwe */ -@SupportedAnnotationTypes({"com.querydsl.core.annotations.*", "org.mongodb.morphia.annotations.*"}) +@SupportedAnnotationTypes({"com.querydsl.core.annotations.*", "dev.morphia.annotations.*"}) public class MorphiaAnnotationProcessor extends AbstractQuerydslProcessor { @Override From 785c0fd3c4ea27dba7ae9d7ac15727e8e160c9ae Mon Sep 17 00:00:00 2001 From: Kamil Krzywanski Date: Mon, 5 May 2025 15:48:58 +0200 Subject: [PATCH 2/7] ISSUE #1060 - step 1 - change org.mongodb.morphia to dev.morphia.morphia - skipping japicmp --- querydsl-libraries/querydsl-mongodb/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-libraries/querydsl-mongodb/pom.xml b/querydsl-libraries/querydsl-mongodb/pom.xml index 303512097c..a02577e7db 100644 --- a/querydsl-libraries/querydsl-mongodb/pom.xml +++ b/querydsl-libraries/querydsl-mongodb/pom.xml @@ -13,6 +13,7 @@ Mongodb support for Querydsl + true com.mongodb;version="0.0.0", dev.morphia.*;version="1.6.1", org.bson.*;version="0.0.0", From 687bb463e7ea820cdb601998e1439bae5ca89f56 Mon Sep 17 00:00:00 2001 From: Kamil Krzywanski Date: Mon, 5 May 2025 16:25:57 +0200 Subject: [PATCH 3/7] ISSUE #1060 - step 1 - change org.mongodb.morphia to dev.morphia.morphia - fix tests --- .../mongodb/MongodbSerializerTest.java | 37 ++++++++++++++----- .../MongodbDocumentSerializerTest.java | 12 +++++- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java index 6c1bccf95c..d1dad8d829 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java @@ -191,28 +191,39 @@ public void orderBy() { @Test public void regexCases() { assertQuery( - title.startsWith("A"), dbo("title", dbo("$regex", "^\\QA\\E").append("$options", ""))); + title.startsWith("A"), + dbo("title", dbo("$regularExpression", dbo("pattern", "^\\QA\\E").append("options", "")))); assertQuery( title.startsWithIgnoreCase("A"), - dbo("title", dbo("$regex", "^\\QA\\E").append("$options", "i"))); + dbo("title", dbo("$regularExpression", dbo("pattern", "^\\QA\\E").append("options", "i")))); assertQuery( - title.endsWith("A"), dbo("title", dbo("$regex", "\\QA\\E$").append("$options", ""))); + title.endsWith("A"), + dbo("title", dbo("$regularExpression", dbo("pattern", "\\QA\\E$").append("options", "")))); assertQuery( title.endsWithIgnoreCase("A"), - dbo("title", dbo("$regex", "\\QA\\E$").append("$options", "i"))); + dbo("title", dbo("$regularExpression", dbo("pattern", "\\QA\\E$").append("options", "i")))); assertQuery( title.equalsIgnoreCase("A"), - dbo("title", dbo("$regex", "^\\QA\\E$").append("$options", "i"))); + dbo( + "title", + dbo("$regularExpression", dbo("pattern", "^\\QA\\E$").append("options", "i")))); assertQuery( - title.contains("A"), dbo("title", dbo("$regex", ".*\\QA\\E.*").append("$options", ""))); + title.contains("A"), + dbo( + "title", + dbo("$regularExpression", dbo("pattern", ".*\\QA\\E.*").append("options", "")))); assertQuery( title.containsIgnoreCase("A"), - dbo("title", dbo("$regex", ".*\\QA\\E.*").append("$options", "i"))); + dbo( + "title", + dbo("$regularExpression", dbo("pattern", ".*\\QA\\E.*").append("options", "i")))); - assertQuery(title.matches(".*A^"), dbo("title", dbo("$regex", ".*A^").append("$options", ""))); + assertQuery( + title.matches(".*A^"), + dbo("title", dbo("$regularExpression", dbo("pattern", ".*A^").append("options", "")))); } @Test @@ -222,8 +233,14 @@ public void and() { dbo( "$and", dblist( - dbo("title", dbo("$regex", "^\\Qa\\E").append("$options", "i")), - dbo("title", dbo("$regex", "\\Qb\\E$").append("$options", "i"))))); + dbo( + "title", + dbo("$regularExpression", dbo("pattern", "^\\Qa\\E").append("options", "i"))), + dbo( + "title", + dbo( + "$regularExpression", + dbo("pattern", "\\Qb\\E$").append("options", "i")))))); } @Test diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbDocumentSerializerTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbDocumentSerializerTest.java index 5d91a1ad9b..fc68ba9226 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbDocumentSerializerTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbDocumentSerializerTest.java @@ -236,8 +236,16 @@ public void and() { document( "$and", Arrays.asList( - document("title", document("$regex", "^\\Qa\\E").append("$options", "i")), - document("title", document("$regex", "\\Qb\\E$").append("$options", "i"))))); + document( + "title", + document( + "$regularExpression", + document("pattern", "^\\Qa\\E").append("options", "i"))), + document( + "title", + document( + "$regularExpression", + document("pattern", "\\Qb\\E$").append("options", "i")))))); } @Test From 9e0773a077f6c6be927bcfa89bbaa08ffd416b2c Mon Sep 17 00:00:00 2001 From: Kamil Krzywanski Date: Mon, 5 May 2025 19:31:13 +0200 Subject: [PATCH 4/7] ISSUE #1060 - step 2 - bump morphia to 2.2 and mongo to 4.2.2 --- pom.xml | 6 +- querydsl-libraries/querydsl-mongodb/pom.xml | 2 +- .../mongodb/AbstractMongodbQuery.java | 69 ++++++++++--------- .../querydsl/mongodb/MongodbSerializer.java | 3 +- .../mongodb/morphia/MorphiaQuery.java | 50 ++++---------- .../mongodb/morphia/MorphiaSerializer.java | 20 ++++-- .../mongodb/MongodbGeoSpatialQueryTest.java | 12 ++-- .../com/querydsl/mongodb/MongodbJoinTest.java | 17 ++--- .../MongodbPolymorphicCollectionTest.java | 14 ++-- .../querydsl/mongodb/MongodbQueryTest.java | 35 +++++----- .../mongodb/MongodbSerializerTest.java | 2 +- .../mongodb/document/MongodbQueryTest.java | 42 ++++++----- .../com/querydsl/mongodb/domain/Address.java | 3 +- .../com/querydsl/mongodb/domain/City.java | 3 + .../com/querydsl/mongodb/domain/Country.java | 2 - .../querydsl/mongodb/domain/LocaleCodec.java | 26 +++++++ .../mongodb/domain/LocaleConverter.java | 38 ---------- .../querydsl/mongodb/domain/MapEntity.java | 3 +- .../mongodb/domain/MongodbUserTest.java | 14 ++-- .../com/querydsl/mongodb/domain/User.java | 5 +- .../com/querydsl/mongodb/domain2/User.java | 14 +++- querydsl-tooling/querydsl-apt/pom.xml | 2 +- 22 files changed, 185 insertions(+), 197 deletions(-) create mode 100644 querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleCodec.java delete mode 100644 querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleConverter.java diff --git a/pom.xml b/pom.xml index f3b52a2f8e..e577dbbae4 100644 --- a/pom.xml +++ b/pom.xml @@ -120,7 +120,7 @@ 3.49.1.0 13.10.00.35 5.0.7.java11 - 4.1.1 + 4.2.2 1.0.0.RELEASE @@ -141,7 +141,7 @@ 3.5.3 1.24 2.2.3 - 1.6.1 + 2.2.0 1.37 2.1.20 2.1.20-2.0.1 @@ -454,7 +454,7 @@ - com.querydsl.core.annotations.QueryProjection + com.querydsl.core.annotations.QueryProjection true true diff --git a/querydsl-libraries/querydsl-mongodb/pom.xml b/querydsl-libraries/querydsl-mongodb/pom.xml index a02577e7db..b2641f6dd1 100644 --- a/querydsl-libraries/querydsl-mongodb/pom.xml +++ b/querydsl-libraries/querydsl-mongodb/pom.xml @@ -38,7 +38,7 @@ dev.morphia.morphia - core + morphia-core ${morphia.version} provided true diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java index 78190fec2a..4eb5309705 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java @@ -14,10 +14,9 @@ package com.querydsl.mongodb; import com.mongodb.BasicDBObject; -import com.mongodb.DBCollection; -import com.mongodb.DBCursor; -import com.mongodb.DBObject; import com.mongodb.ReadPreference; +import com.mongodb.client.FindIterable; +import com.mongodb.client.MongoCollection; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.Fetchable; @@ -44,6 +43,8 @@ import java.util.List; import java.util.Map; import java.util.function.Function; +import org.bson.Document; +import org.bson.conversions.Bson; import org.jetbrains.annotations.Nullable; /** @@ -64,9 +65,9 @@ private static class NoResults extends RuntimeException {} private final QueryMixin queryMixin; - private final DBCollection collection; + private final MongoCollection collection; - private final Function transformer; + private final Function transformer; private ReadPreference readPreference; @@ -79,7 +80,7 @@ private static class NoResults extends RuntimeException {} */ @SuppressWarnings("unchecked") public AbstractMongodbQuery( - DBCollection collection, Function transformer, MongodbSerializer serializer) { + MongoCollection collection, Function transformer, MongodbSerializer serializer) { @SuppressWarnings("unchecked") // Q is this plus subclass var query = (Q) this; this.queryMixin = new QueryMixin<>(query, new DefaultQueryMetadata(), false); @@ -122,7 +123,7 @@ public AnyEmbeddedBuilder anyEmbedded( return new AnyEmbeddedBuilder<>(queryMixin, collection); } - protected abstract DBCollection getCollection(Class type); + protected abstract MongoCollection getCollection(Class type); @Nullable protected Predicate createFilter(QueryMetadata metadata) { @@ -164,16 +165,15 @@ protected List getIds(Class targetType, Predicate condition) { // TODO : fetch only ids var cursor = createCursor( - collection, - condition, - null, - QueryModifiers.EMPTY, - Collections.>emptyList()); + collection, + condition, + null, + QueryModifiers.EMPTY, + Collections.>emptyList()) + .cursor(); if (cursor.hasNext()) { - List ids = new ArrayList<>(cursor.count()); - for (DBObject obj : cursor) { - ids.add(obj.get("_id")); - } + List ids = new ArrayList<>(); + cursor.forEachRemaining(ids::add); return ids; } else { return Collections.emptyList(); @@ -236,7 +236,7 @@ public CloseableIterator iterate(Path... paths) { @Override public CloseableIterator iterate() { - final var cursor = createCursor(); + final var cursor = createCursor().cursor(); return new CloseableIterator<>() { @Override public boolean hasNext() { @@ -272,7 +272,7 @@ public List fetch() { try { var cursor = createCursor(); List results = new ArrayList<>(); - for (DBObject dbObject : cursor) { + for (Document dbObject : cursor) { results.add(transformer.apply(dbObject)); } return results; @@ -281,7 +281,7 @@ public List fetch() { } } - protected DBCursor createCursor() { + protected FindIterable createCursor() { var metadata = queryMixin.getMetadata(); Predicate filter = createFilter(metadata); return createCursor( @@ -292,13 +292,19 @@ protected DBCursor createCursor() { metadata.getOrderBy()); } - protected DBCursor createCursor( - DBCollection collection, + protected FindIterable createCursor( + MongoCollection collection, @Nullable Predicate where, Expression projection, QueryModifiers modifiers, List> orderBy) { - var cursor = collection.find(createQuery(where), createProjection(projection)); + var cursor = + readPreference != null + ? collection + .withReadPreference(readPreference) + .find(createQuery(where)) + .projection(createProjection(projection)) + : collection.find(createQuery(where)).projection(createProjection(projection)); Integer limit = modifiers.getLimitAsInteger(); Integer offset = modifiers.getOffsetAsInteger(); if (limit != null) { @@ -310,15 +316,12 @@ protected DBCursor createCursor( if (orderBy.size() > 0) { cursor.sort(serializer.toSort(orderBy)); } - if (readPreference != null) { - cursor.setReadPreference(readPreference); - } return cursor; } - private DBObject createProjection(Expression projection) { + private Bson createProjection(Expression projection) { if (projection instanceof FactoryExpression) { - DBObject obj = new BasicDBObject(); + var obj = new BasicDBObject(); for (Object expr : ((FactoryExpression) projection).getArgs()) { if (expr instanceof Expression) { obj.put((String) serializer.handle((Expression) expr), 1); @@ -343,7 +346,7 @@ public K fetchFirst(Path... paths) { @Override public K fetchFirst() { try { - var c = createCursor().limit(1); + var c = createCursor().limit(1).cursor(); if (c.hasNext()) { return transformer.apply(c.next()); } else { @@ -372,7 +375,7 @@ public K fetchOne() throws NonUniqueResultException { if (limit == null) { limit = 2L; } - var c = createCursor().limit(limit.intValue()); + var c = createCursor().limit(limit.intValue()).cursor(); if (c.hasNext()) { var rv = transformer.apply(c.next()); if (c.hasNext()) { @@ -416,15 +419,15 @@ public QueryResults fetchResults() { public long fetchCount() { try { Predicate filter = createFilter(queryMixin.getMetadata()); - return collection.count(createQuery(filter)); + return collection.countDocuments(createQuery(filter)); } catch (NoResults ex) { return 0L; } } - private DBObject createQuery(@Nullable Predicate predicate) { + private Bson createQuery(@Nullable Predicate predicate) { if (predicate != null) { - return (DBObject) serializer.handle(predicate); + return (Bson) serializer.handle(predicate); } else { return new BasicDBObject(); } @@ -444,7 +447,7 @@ public void setReadPreference(ReadPreference readPreference) { * * @return */ - public DBObject asDBObject() { + public Bson asDBObject() { return createQuery(queryMixin.getMetadata().getWhere()); } diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 56c01cf98e..09919df5fb 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -38,6 +38,7 @@ import java.util.Map; import java.util.regex.Pattern; import org.bson.BSONObject; +import org.bson.conversions.Bson; import org.bson.types.ObjectId; /** @@ -52,7 +53,7 @@ public Object handle(Expression expression) { return expression.accept(this, null); } - public DBObject toSort(List> orderBys) { + public Bson toSort(List> orderBys) { var sort = new BasicDBObject(); for (OrderSpecifier orderBy : orderBys) { Object key = orderBy.getTarget().accept(this, null); diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java index 9a3937f389..65c5c5139e 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java @@ -13,16 +13,12 @@ */ package com.querydsl.mongodb.morphia; -import com.mongodb.DBCollection; -import com.mongodb.DBCursor; -import com.mongodb.DBObject; +import com.mongodb.client.FindIterable; +import com.mongodb.client.MongoCollection; import com.querydsl.core.types.EntityPath; import com.querydsl.mongodb.AbstractMongodbQuery; import dev.morphia.Datastore; -import dev.morphia.Morphia; -import dev.morphia.mapping.cache.DefaultEntityCache; -import dev.morphia.mapping.cache.EntityCache; -import java.util.function.Function; +import org.bson.Document; /** * {@code MorphiaQuery} extends {@link AbstractMongodbQuery} with Morphia specific transformations @@ -43,49 +39,27 @@ */ public class MorphiaQuery extends AbstractMongodbQuery> { - private final EntityCache cache; - private final Datastore datastore; - public MorphiaQuery(Morphia morphia, Datastore datastore, EntityPath entityPath) { - this(morphia, datastore, new DefaultEntityCache(), entityPath); - } - - public MorphiaQuery(Morphia morphia, Datastore datastore, Class entityType) { - this(morphia, datastore, new DefaultEntityCache(), entityType); - } - - public MorphiaQuery( - Morphia morphia, Datastore datastore, EntityCache cache, EntityPath entityPath) { - this(morphia, datastore, cache, entityPath.getType()); + public MorphiaQuery(Datastore datastore, EntityPath entityPath) { + this(datastore, entityPath.getType()); } - public MorphiaQuery( - final Morphia morphia, - final Datastore datastore, - final EntityCache cache, - final Class entityType) { + public MorphiaQuery(final Datastore datastore, final Class entityType) { super( - datastore.getCollection(entityType), - new Function() { - @Override - public K apply(DBObject dbObject) { - return morphia.fromDBObject(datastore, entityType, dbObject, cache); - } - }, - new MorphiaSerializer(morphia)); + datastore.getMapper().getCollection(entityType), + dbObject -> datastore.getMapper().fromDocument(entityType, dbObject), + new MorphiaSerializer(datastore)); this.datastore = datastore; - this.cache = cache; } @Override - protected DBCursor createCursor() { - cache.flush(); + protected FindIterable createCursor() { return super.createCursor(); } @Override - protected DBCollection getCollection(Class type) { - return datastore.getCollection(type); + protected MongoCollection getCollection(Class type) { + return datastore.getMapper().getCollection(type); } } diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java index 10aff4d157..31100cca6c 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java @@ -18,8 +18,8 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.mongodb.MongodbSerializer; +import dev.morphia.Datastore; import dev.morphia.Key; -import dev.morphia.Morphia; import dev.morphia.annotations.Id; import dev.morphia.annotations.Property; import dev.morphia.annotations.Reference; @@ -33,16 +33,22 @@ */ public class MorphiaSerializer extends MongodbSerializer { - private final Morphia morphia; + private final Datastore morphia; - public MorphiaSerializer(Morphia morphia) { + public MorphiaSerializer(Datastore morphia) { this.morphia = morphia; } @Override public Object visit(Constant expr, Void context) { var value = super.visit(expr, context); - return morphia.getMapper().toMongoObject(null, null, value); + + // Skip Morphia mapping for primitives + if (!morphia.getMapper().isMappable(value.getClass())) { + return value; + } + + return morphia.getMapper().toDocument(value); } @Override @@ -88,13 +94,13 @@ protected boolean isId(Path arg) { @Override protected DBRef asReference(Object constant) { Key key = morphia.getMapper().getKey(constant); - return morphia.getMapper().keyToDBRef(key); + return new DBRef(key.getCollection(), key); } @Override protected DBRef asReferenceKey(Class entity, Object id) { - var collection = morphia.getMapper().getCollectionName(entity); + var collection = morphia.getMapper().getEntityModel(entity).getCollectionName(); Key key = new Key(entity, collection, id); - return morphia.getMapper().keyToDBRef(key); + return new DBRef(key.getCollection(), key); } } diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java index 1c669507cd..0db22ff414 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java @@ -16,8 +16,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.within; -import com.mongodb.MongoClient; import com.mongodb.MongoException; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; import com.querydsl.core.testutil.MongoDB; import com.querydsl.mongodb.domain.GeoEntity; import com.querydsl.mongodb.domain.QGeoEntity; @@ -34,14 +35,13 @@ public class MongodbGeoSpatialQueryTest { private final String dbname = "geodb"; private final MongoClient mongo; - private final Morphia morphia; private final Datastore ds; private final QGeoEntity geoEntity = new QGeoEntity("geoEntity"); public MongodbGeoSpatialQueryTest() throws UnknownHostException, MongoException { - mongo = new MongoClient(); - morphia = new Morphia().map(GeoEntity.class); - ds = morphia.createDatastore(mongo, dbname); + mongo = MongoClients.create(); + ds = Morphia.createDatastore(mongo, dbname); + ds.getMapper().map(GeoEntity.class); } @Before @@ -101,6 +101,6 @@ public void geo_intersects() { } private MorphiaQuery query() { - return new MorphiaQuery<>(morphia, ds, geoEntity); + return new MorphiaQuery<>(ds, geoEntity); } } diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java index f8dfeb8d17..316073f074 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java @@ -2,8 +2,9 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.mongodb.MongoClient; import com.mongodb.MongoException; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; import com.querydsl.core.testutil.MongoDB; import com.querydsl.core.types.Predicate; import com.querydsl.mongodb.domain.Item; @@ -13,6 +14,7 @@ import dev.morphia.Datastore; import dev.morphia.Morphia; import java.net.UnknownHostException; +import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -21,7 +23,6 @@ public class MongodbJoinTest { private final MongoClient mongo; - private final Morphia morphia; private final Datastore ds; private final String dbname = "testdb"; @@ -31,9 +32,9 @@ public class MongodbJoinTest { private final QUser enemy = new QUser("enemy"); public MongodbJoinTest() throws UnknownHostException, MongoException { - mongo = new MongoClient(); - morphia = new Morphia().map(User.class).map(Item.class); - ds = morphia.createDatastore(mongo, dbname); + mongo = MongoClients.create(); + ds = Morphia.createDatastore(mongo, dbname); + ds.getMapper().map(User.class, Item.class); } @Before @@ -43,12 +44,12 @@ public void before() throws UnknownHostException, MongoException { var friend1 = new User("Max", null); var friend2 = new User("Jack", null); var friend3 = new User("Bob", null); - ds.save(friend1, friend2, friend3); + ds.save(List.of(friend1, friend2, friend3)); var user1 = new User("Jane", null, friend1); var user2 = new User("Mary", null, user1); var user3 = new User("Ann", null, friend3); - ds.save(user1, user2, user3); + ds.save(List.of(user1, user2, user3)); var user4 = new User("Mike", null); user4.setFriend(user2); @@ -258,7 +259,7 @@ public void deep() { } private MorphiaQuery query() { - return new MorphiaQuery<>(morphia, ds, user); + return new MorphiaQuery<>(ds, user); } private MorphiaQuery where(Predicate... e) { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java index f5016c8d54..d2c3adf156 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java @@ -2,8 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.mongodb.MongoClient; import com.mongodb.MongoException; +import com.mongodb.client.MongoClients; import com.querydsl.core.testutil.MongoDB; import com.querydsl.core.types.Predicate; import com.querydsl.mongodb.domain.Chips; @@ -15,6 +15,7 @@ import dev.morphia.Datastore; import dev.morphia.Morphia; import java.net.UnknownHostException; +import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.experimental.categories.Category; @@ -22,22 +23,21 @@ @Category(MongoDB.class) public class MongodbPolymorphicCollectionTest { - private final Morphia morphia; private final Datastore ds; private final Fish f1 = new Fish("f1"); private final Fish f2 = new Fish("f2"); private final Chips c1 = new Chips("c1"); public MongodbPolymorphicCollectionTest() throws UnknownHostException, MongoException { - final var mongo = new MongoClient(); - morphia = new Morphia().map(Food.class); - ds = morphia.createDatastore(mongo, "testdb"); + final var mongo = MongoClients.create(); + ds = Morphia.createDatastore(mongo, "testdb"); + ds.getMapper().map(Food.class); } @Before public void before() throws UnknownHostException, MongoException { ds.delete(ds.createQuery(Food.class)); - ds.save(f1, f2, c1); + ds.save(List.of(f1, f2, c1)); } @Test @@ -75,7 +75,7 @@ private Predicate isFish() { } private MorphiaQuery query() { - return new MorphiaQuery<>(morphia, ds, QFood.food); + return new MorphiaQuery<>(ds, QFood.food); } private MorphiaQuery where(final Predicate... e) { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index b39a728454..e295819072 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -17,27 +17,23 @@ import static org.assertj.core.api.Assertions.assertThat; import com.mongodb.BasicDBObject; -import com.mongodb.MongoClient; +import com.mongodb.MongoClientSettings; import com.mongodb.MongoException; import com.mongodb.ReadPreference; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; import com.querydsl.core.NonUniqueResultException; import com.querydsl.core.testutil.MongoDB; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.Predicate; -import com.querydsl.mongodb.domain.Address; -import com.querydsl.mongodb.domain.City; -import com.querydsl.mongodb.domain.Country; -import com.querydsl.mongodb.domain.Dates; -import com.querydsl.mongodb.domain.Item; -import com.querydsl.mongodb.domain.MapEntity; +import com.querydsl.mongodb.domain.*; import com.querydsl.mongodb.domain.QAddress; import com.querydsl.mongodb.domain.QCountry; import com.querydsl.mongodb.domain.QDates; import com.querydsl.mongodb.domain.QItem; import com.querydsl.mongodb.domain.QMapEntity; import com.querydsl.mongodb.domain.QUser; -import com.querydsl.mongodb.domain.User; import com.querydsl.mongodb.domain.User.Gender; import com.querydsl.mongodb.morphia.MorphiaQuery; import dev.morphia.Datastore; @@ -50,6 +46,8 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; +import org.bson.codecs.configuration.CodecRegistries; +import org.bson.codecs.configuration.CodecRegistry; import org.bson.types.ObjectId; import org.junit.Before; import org.junit.Test; @@ -59,7 +57,6 @@ public class MongodbQueryTest { private final MongoClient mongo; - private final Morphia morphia; private final Datastore ds; private final String dbname = "testdb"; @@ -75,9 +72,15 @@ public class MongodbQueryTest { City tampere, helsinki; public MongodbQueryTest() throws UnknownHostException, MongoException { - mongo = new MongoClient(); - morphia = new Morphia().map(User.class).map(Item.class).map(MapEntity.class).map(Dates.class); - ds = morphia.createDatastore(mongo, dbname); + // Register your custom codec + CodecRegistry customRegistry = + CodecRegistries.fromRegistries( + CodecRegistries.fromCodecs(new LocaleCodec()), + MongoClientSettings.getDefaultCodecRegistry()); + mongo = + MongoClients.create(MongoClientSettings.builder().codecRegistry(customRegistry).build()); + ds = Morphia.createDatastore(mongo, dbname); + ds.getMapper().map(User.class, Item.class, MapEntity.class, Dates.class); } @Before @@ -700,7 +703,7 @@ private void assertQuery(Predicate e, OrderSpecifier orderBy, User... expecte } private MorphiaQuery where(EntityPath entity, Predicate... e) { - return new MorphiaQuery<>(morphia, ds, entity).where(e); + return new MorphiaQuery<>(ds, entity).where(e); } private MorphiaQuery where(Predicate... e) { @@ -708,15 +711,15 @@ private MorphiaQuery where(Predicate... e) { } private MorphiaQuery query() { - return new MorphiaQuery<>(morphia, ds, user); + return new MorphiaQuery<>(ds, user); } private MorphiaQuery query(EntityPath path) { - return new MorphiaQuery<>(morphia, ds, path); + return new MorphiaQuery<>(ds, path); } private MorphiaQuery query(Class clazz) { - return new MorphiaQuery<>(morphia, ds, clazz); + return new MorphiaQuery<>(ds, clazz); } private void assertQuery(MorphiaQuery query, User... expected) { diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java index d1dad8d829..f174aedf72 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java @@ -61,7 +61,7 @@ public class MongodbSerializerTest { @Before public void before() { - serializer = new MorphiaSerializer(new Morphia()); + serializer = new MorphiaSerializer(Morphia.createDatastore("db")); entityPath = new PathBuilder<>(Object.class, "obj"); title = entityPath.getString("title"); year = entityPath.getNumber("year", Integer.class); diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java index dab704e6fe..4f4569a57e 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java @@ -19,9 +19,10 @@ import static org.assertj.core.api.Assertions.assertThat; import com.mongodb.DBRef; -import com.mongodb.MongoClient; import com.mongodb.MongoException; import com.mongodb.ReadPreference; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.querydsl.core.NonUniqueResultException; @@ -71,7 +72,6 @@ public class MongodbQueryTest { private final MongoClient mongo; - private final Morphia morphia; private final MongoDatabase database; private final Datastore ds; @@ -90,10 +90,10 @@ public class MongodbQueryTest { City tampere, helsinki; public MongodbQueryTest() throws UnknownHostException, MongoException { - mongo = new MongoClient(); - morphia = new Morphia().map(User.class).map(Item.class).map(MapEntity.class).map(Dates.class); + mongo = MongoClients.create(); + ds = Morphia.createDatastore(mongo, dbname); database = mongo.getDatabase(dbname); - ds = morphia.createDatastore(mongo, dbname); + ds.getMapper().map(User.class, Item.class, MapEntity.class, Dates.class); } @Before @@ -671,7 +671,7 @@ public void asDBObject() { private Document asDocument(AbstractEntity entity) { return database - .getCollection(ds.getCollection(entity.getClass()).getName()) + .getCollection(ds.getMapper().getEntityModel(entity.getClass()).getCollectionName()) .find(new Document("_id", entity.getId())) .first(); } @@ -685,7 +685,7 @@ private void assertQuery(Predicate e, OrderSpecifier orderBy, Document... exp } private SimpleMongodbQuery where(EntityPath entity, Predicate... e) { - return new SimpleMongodbQuery(morphia, ds, entity.getType(), database).where(e); + return new SimpleMongodbQuery(ds, entity.getType(), database).where(e); } private SimpleMongodbQuery where(Predicate... e) { @@ -693,15 +693,15 @@ private SimpleMongodbQuery where(Predicate... e) { } private SimpleMongodbQuery query() { - return new SimpleMongodbQuery(morphia, ds, user.getType(), database); + return new SimpleMongodbQuery(ds, user.getType(), database); } private SimpleMongodbQuery query(EntityPath path) { - return new SimpleMongodbQuery(morphia, ds, path.getType(), database); + return new SimpleMongodbQuery(ds, path.getType(), database); } private SimpleMongodbQuery query(Class clazz) { - return new SimpleMongodbQuery(morphia, ds, clazz, database); + return new SimpleMongodbQuery(ds, clazz, database); } private void assertQuery(SimpleMongodbQuery query, Document... expected) { @@ -754,28 +754,26 @@ private static class SimpleMongodbQuery private final MongoDatabase database; SimpleMongodbQuery( - final Morphia morphia, - final Datastore datastore, - final Class entityType, - final MongoDatabase database) { + final Datastore datastore, final Class entityType, final MongoDatabase database) { super( - database.getCollection(datastore.getCollection(entityType).getName()), + database.getCollection( + datastore.getMapper().getEntityModel(entityType).getCollectionName()), Function.identity(), - new SampleSerializer(morphia)); + new SampleSerializer(datastore)); this.datastore = datastore; this.database = database; } @Override protected MongoCollection getCollection(Class type) { - return database.getCollection(datastore.getCollection(type).getName()); + return database.getCollection(datastore.getMapper().getEntityModel(type).getCollectionName()); } } static class SampleSerializer extends MongodbDocumentSerializer { - private final Morphia morphia; + private final Datastore morphia; - SampleSerializer(Morphia morphia) { + SampleSerializer(Datastore morphia) { this.morphia = morphia; } @@ -787,14 +785,14 @@ protected boolean isReference(Path arg) { @Override protected DBRef asReference(Object constant) { Key key = morphia.getMapper().getKey(constant); - return morphia.getMapper().keyToDBRef(key); + return new DBRef(key.getCollection(), key); } @Override protected DBRef asReferenceKey(Class entity, Object id) { - var collection = morphia.getMapper().getCollectionName(entity); + var collection = morphia.getMapper().getEntityModel(entity).getCollectionName(); Key key = new Key(entity, collection, id); - return morphia.getMapper().keyToDBRef(key); + return new DBRef(key.getCollection(), id); } @Override diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Address.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Address.java index 2fb4032b72..8fcb3cfa4a 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Address.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Address.java @@ -15,6 +15,7 @@ import dev.morphia.annotations.Embedded; +@Embedded public final class Address { public Address() {} @@ -29,5 +30,5 @@ public Address(String street, String postCode, City city) { public String postCode; - @Embedded public City city; + public City city; } diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/City.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/City.java index 7c54dd965c..0de36edfc0 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/City.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/City.java @@ -13,6 +13,9 @@ */ package com.querydsl.mongodb.domain; +import dev.morphia.annotations.Embedded; + +@Embedded public final class City { public City() {} diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Country.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Country.java index 68154f3cca..528f18ed12 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Country.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Country.java @@ -1,11 +1,9 @@ package com.querydsl.mongodb.domain; -import dev.morphia.annotations.Converters; import dev.morphia.annotations.Entity; import java.util.Locale; @Entity -@Converters(LocaleConverter.class) public class Country extends AbstractEntity { private String name; private Locale defaultLocale; diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleCodec.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleCodec.java new file mode 100644 index 0000000000..5d932eabe7 --- /dev/null +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleCodec.java @@ -0,0 +1,26 @@ +package com.querydsl.mongodb.domain; + +import java.util.Locale; +import org.bson.*; +import org.bson.codecs.Codec; +import org.bson.codecs.DecoderContext; +import org.bson.codecs.EncoderContext; + +public class LocaleCodec implements Codec { + + @Override + public void encode(BsonWriter writer, Locale value, EncoderContext encoderContext) { + writer.writeString(value.toLanguageTag()); + } + + @Override + public Locale decode(BsonReader reader, DecoderContext decoderContext) { + String tag = reader.readString(); + return Locale.forLanguageTag(tag); + } + + @Override + public Class getEncoderClass() { + return Locale.class; + } +} diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleConverter.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleConverter.java deleted file mode 100644 index a5b8ea32ec..0000000000 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/LocaleConverter.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.querydsl.mongodb.domain; - -import dev.morphia.converters.SimpleValueConverter; -import dev.morphia.converters.TypeConverter; -import dev.morphia.mapping.MappedField; -import dev.morphia.mapping.MappingException; -import java.util.Locale; - -public class LocaleConverter extends TypeConverter implements SimpleValueConverter { - - public LocaleConverter() { - super(Locale.class); - } - - @Override - public final Object encode(Object value, MappedField optionalExtraInfo) throws MappingException { - if (value == null) { - return null; - } - if (!(value instanceof Locale)) { - throw new MappingException("Unable to convert " + value.getClass().getName()); - } - return ((Locale) value).toLanguageTag(); - } - - @Override - @SuppressWarnings("rawtypes") - public Locale decode(Class targetClass, Object fromDBObject, MappedField optionalExtraInfo) - throws MappingException { - if (fromDBObject == null) { - return null; - } - if (fromDBObject instanceof String string) { - return Locale.forLanguageTag(string); - } - throw new MappingException("Unable to convert " + fromDBObject.getClass().getName()); - } -} diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MapEntity.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MapEntity.java index fbd690ffb1..d43dc6285c 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MapEntity.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MapEntity.java @@ -1,6 +1,5 @@ package com.querydsl.mongodb.domain; -import dev.morphia.annotations.Embedded; import dev.morphia.annotations.Entity; import java.util.HashMap; import java.util.Map; @@ -8,7 +7,7 @@ @Entity public class MapEntity extends AbstractEntity { - @Embedded private Map properties = new HashMap<>(); + private Map properties = new HashMap<>(); public Map getProperties() { return properties; diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java index 73cb4b0f82..17772bb357 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java @@ -15,13 +15,19 @@ import static org.assertj.core.api.Assertions.assertThat; +import dev.morphia.Datastore; import dev.morphia.Morphia; import org.bson.types.ObjectId; import org.junit.Test; public class MongodbUserTest { - private static final Morphia morphia = new Morphia().map(User.class); + private static final Datastore morphia; + + static { + morphia = Morphia.createDatastore("db"); + morphia.getMapper().map(User.class); + } @Test public void map() { @@ -32,7 +38,7 @@ public void map() { user.setFirstName("Jaakko"); user.addAddress("Aakatu", "00300", tampere); - assertThat(morphia.toDBObject(user)).isNotNull(); + assertThat(morphia.getMapper().toDocument(user)).isNotNull(); } @Test @@ -43,7 +49,7 @@ public void friend() { var user = new User(); user.setFriend(friend); - assertThat(morphia.toDBObject(user)).isNotNull(); + assertThat(morphia.getMapper().toDocument(user)).isNotNull(); } @Test @@ -54,6 +60,6 @@ public void friends() { var user = new User(); user.addFriend(friend); - assertThat(morphia.toDBObject(user)).isNotNull(); + assertThat(morphia.getMapper().toDocument(user)).isNotNull(); } } diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/User.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/User.java index db5ed289d9..5244b7c10c 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/User.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/User.java @@ -13,7 +13,6 @@ */ package com.querydsl.mongodb.domain; -import dev.morphia.annotations.Embedded; import dev.morphia.annotations.Entity; import dev.morphia.annotations.Reference; import java.util.ArrayList; @@ -36,9 +35,9 @@ public enum Gender { private Gender gender; - @Embedded private final List
addresses = new ArrayList<>(); + private final List
addresses = new ArrayList<>(); - @Embedded private Address mainAddress; + private Address mainAddress; @Reference private final List friends = new ArrayList<>(); diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/User.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/User.java index a65c6d0fc1..3d37f33177 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/User.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain2/User.java @@ -13,12 +13,20 @@ */ package com.querydsl.mongodb.domain2; -import dev.morphia.annotations.Embedded; import dev.morphia.annotations.Entity; import java.util.Map; -@Entity(value = "USER", noClassnameStored = true) +@Entity("USER") public class User { - @Embedded Map properties; + private Map properties; + + // Getters and setters (required for Morphia 2.x) + public Map getProperties() { + return properties; + } + + public void setProperties(Map properties) { + this.properties = properties; + } } diff --git a/querydsl-tooling/querydsl-apt/pom.xml b/querydsl-tooling/querydsl-apt/pom.xml index fc067f4233..d866cf99ca 100644 --- a/querydsl-tooling/querydsl-apt/pom.xml +++ b/querydsl-tooling/querydsl-apt/pom.xml @@ -61,7 +61,7 @@ dev.morphia.morphia - core + morphia-core ${morphia.version} provided From 9a2b787f854f92d4a1d2abe302d65a5c5a229a50 Mon Sep 17 00:00:00 2001 From: Kamil Krzywanski Date: Tue, 6 May 2025 01:01:00 +0200 Subject: [PATCH 5/7] ISSUE #1060 - step 2 - bump morphia to 2.2 and mongo to 4.2.2 -> make tests work again --- .../mongodb/AbstractMongodbQuery.java | 23 +++++----- .../mongodb/morphia/MorphiaQuery.java | 5 +-- .../mongodb/morphia/MorphiaSerializer.java | 11 +++-- .../mongodb/MongodbGeoSpatialQueryTest.java | 2 +- .../com/querydsl/mongodb/MongodbJoinTest.java | 3 +- .../MongodbPolymorphicCollectionTest.java | 5 ++- .../querydsl/mongodb/MongodbQueryTest.java | 10 ++--- .../mongodb/document/MongodbQueryTest.java | 45 ++++++++++++++----- 8 files changed, 63 insertions(+), 41 deletions(-) diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java index 4eb5309705..ab15f3bec9 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java @@ -43,7 +43,6 @@ import java.util.List; import java.util.Map; import java.util.function.Function; -import org.bson.Document; import org.bson.conversions.Bson; import org.jetbrains.annotations.Nullable; @@ -67,7 +66,7 @@ private static class NoResults extends RuntimeException {} private final MongoCollection collection; - private final Function transformer; + private final Function transformer; private ReadPreference readPreference; @@ -75,12 +74,12 @@ private static class NoResults extends RuntimeException {} * Create a new MongodbQuery instance * * @param collection collection - * @param transformer result transformer + * @param transformer id transformer * @param serializer serializer */ @SuppressWarnings("unchecked") public AbstractMongodbQuery( - MongoCollection collection, Function transformer, MongodbSerializer serializer) { + MongoCollection collection, Function transformer, MongodbSerializer serializer) { @SuppressWarnings("unchecked") // Q is this plus subclass var query = (Q) this; this.queryMixin = new QueryMixin<>(query, new DefaultQueryMetadata(), false); @@ -173,7 +172,7 @@ protected List getIds(Class targetType, Predicate condition) { .cursor(); if (cursor.hasNext()) { List ids = new ArrayList<>(); - cursor.forEachRemaining(ids::add); + cursor.forEachRemaining(document -> ids.add(transformer.apply(document))); return ids; } else { return Collections.emptyList(); @@ -245,7 +244,7 @@ public boolean hasNext() { @Override public K next() { - return transformer.apply(cursor.next()); + return cursor.next(); } @Override @@ -272,8 +271,8 @@ public List fetch() { try { var cursor = createCursor(); List results = new ArrayList<>(); - for (Document dbObject : cursor) { - results.add(transformer.apply(dbObject)); + for (K dbObject : cursor) { + results.add(dbObject); } return results; } catch (NoResults ex) { @@ -281,7 +280,7 @@ public List fetch() { } } - protected FindIterable createCursor() { + protected FindIterable createCursor() { var metadata = queryMixin.getMetadata(); Predicate filter = createFilter(metadata); return createCursor( @@ -292,7 +291,7 @@ protected FindIterable createCursor() { metadata.getOrderBy()); } - protected FindIterable createCursor( + protected FindIterable createCursor( MongoCollection collection, @Nullable Predicate where, Expression projection, @@ -348,7 +347,7 @@ public K fetchFirst() { try { var c = createCursor().limit(1).cursor(); if (c.hasNext()) { - return transformer.apply(c.next()); + return c.next(); } else { return null; } @@ -377,7 +376,7 @@ public K fetchOne() throws NonUniqueResultException { } var c = createCursor().limit(limit.intValue()).cursor(); if (c.hasNext()) { - var rv = transformer.apply(c.next()); + var rv = c.next(); if (c.hasNext()) { throw new NonUniqueResultException(); } diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java index 65c5c5139e..24642d7e44 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java @@ -18,7 +18,6 @@ import com.querydsl.core.types.EntityPath; import com.querydsl.mongodb.AbstractMongodbQuery; import dev.morphia.Datastore; -import org.bson.Document; /** * {@code MorphiaQuery} extends {@link AbstractMongodbQuery} with Morphia specific transformations @@ -48,13 +47,13 @@ public MorphiaQuery(Datastore datastore, EntityPath entityPath) { public MorphiaQuery(final Datastore datastore, final Class entityType) { super( datastore.getMapper().getCollection(entityType), - dbObject -> datastore.getMapper().fromDocument(entityType, dbObject), + dbObject -> datastore.getMapper().getId(dbObject), new MorphiaSerializer(datastore)); this.datastore = datastore; } @Override - protected FindIterable createCursor() { + protected FindIterable createCursor() { return super.createCursor(); } diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java index 31100cca6c..01dbb5ed6f 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java @@ -19,7 +19,6 @@ import com.querydsl.core.types.PathMetadata; import com.querydsl.mongodb.MongodbSerializer; import dev.morphia.Datastore; -import dev.morphia.Key; import dev.morphia.annotations.Id; import dev.morphia.annotations.Property; import dev.morphia.annotations.Reference; @@ -92,15 +91,15 @@ protected boolean isId(Path arg) { } @Override - protected DBRef asReference(Object constant) { - Key key = morphia.getMapper().getKey(constant); - return new DBRef(key.getCollection(), key); + protected DBRef asReference(Object entity) { + Object key = morphia.getMapper().getId(entity); + return new DBRef( + morphia.getMapper().getEntityModel(entity.getClass()).getCollectionName(), key); } @Override protected DBRef asReferenceKey(Class entity, Object id) { var collection = morphia.getMapper().getEntityModel(entity).getCollectionName(); - Key key = new Key(entity, collection, id); - return new DBRef(key.getCollection(), key); + return new DBRef(collection, id); } } diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java index 0db22ff414..0c13ea3316 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java @@ -46,7 +46,7 @@ public MongodbGeoSpatialQueryTest() throws UnknownHostException, MongoException @Before public void before() { - ds.delete(ds.createQuery(GeoEntity.class)); + ds.getMapper().getCollection(GeoEntity.class).deleteMany(new org.bson.Document()); ds.ensureIndexes(GeoEntity.class); } diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java index 316073f074..5345c59838 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java @@ -39,8 +39,7 @@ public MongodbJoinTest() throws UnknownHostException, MongoException { @Before public void before() throws UnknownHostException, MongoException { - ds.delete(ds.createQuery(User.class)); - + ds.getMapper().getCollection(User.class).deleteMany(new org.bson.Document()); var friend1 = new User("Max", null); var friend2 = new User("Jack", null); var friend3 = new User("Bob", null); diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java index d2c3adf156..4178b7ae33 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java @@ -36,7 +36,10 @@ public MongodbPolymorphicCollectionTest() throws UnknownHostException, MongoExce @Before public void before() throws UnknownHostException, MongoException { - ds.delete(ds.createQuery(Food.class)); + ds.getMapper().getCollection(Food.class).deleteMany(new org.bson.Document()); + ds.getMapper().getCollection(Chips.class).deleteMany(new org.bson.Document()); + ds.getMapper().getCollection(Fish.class).deleteMany(new org.bson.Document()); + ds.save(List.of(f1, f2, c1)); } diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index e295819072..c86fc45ae6 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -85,10 +85,10 @@ public MongodbQueryTest() throws UnknownHostException, MongoException { @Before public void before() throws UnknownHostException, MongoException { - ds.delete(ds.createQuery(Item.class)); - ds.delete(ds.createQuery(User.class)); - ds.delete(ds.createQuery(Country.class)); - ds.delete(ds.createQuery(MapEntity.class)); + ds.getMapper().getCollection(Item.class).deleteMany(new org.bson.Document()); + ds.getMapper().getCollection(User.class).deleteMany(new org.bson.Document()); + ds.getMapper().getCollection(Country.class).deleteMany(new org.bson.Document()); + ds.getMapper().getCollection(MapEntity.class).deleteMany(new org.bson.Document()); tampere = new City("Tampere", 61.30, 23.50); helsinki = new City("Helsinki", 60.15, 20.03); @@ -294,7 +294,7 @@ public void dates() { var current = System.currentTimeMillis(); var dayInMillis = 24 * 60 * 60 * 1000; var start = new Date(current); - ds.delete(ds.createQuery(Dates.class)); + ds.getMapper().getCollection(Dates.class).deleteMany(new org.bson.Document()); var d = new Dates(); d.setDate(new Date(current + dayInMillis)); ds.save(d); diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java index 4f4569a57e..253b32606f 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java @@ -48,7 +48,6 @@ import com.querydsl.mongodb.domain.User; import com.querydsl.mongodb.domain.User.Gender; import dev.morphia.Datastore; -import dev.morphia.Key; import dev.morphia.Morphia; import dev.morphia.annotations.Id; import dev.morphia.annotations.Property; @@ -98,10 +97,10 @@ public MongodbQueryTest() throws UnknownHostException, MongoException { @Before public void before() throws UnknownHostException, MongoException { - ds.delete(ds.createQuery(Item.class)); - ds.delete(ds.createQuery(User.class)); - ds.delete(ds.createQuery(Country.class)); - ds.delete(ds.createQuery(MapEntity.class)); + ds.getMapper().getCollection(Item.class).deleteMany(new org.bson.Document()); + ds.getMapper().getCollection(User.class).deleteMany(new org.bson.Document()); + ds.getMapper().getCollection(Country.class).deleteMany(new org.bson.Document()); + ds.getMapper().getCollection(MapEntity.class).deleteMany(new org.bson.Document()); tampere = new City("Tampere", 61.30, 23.50); helsinki = new City("Helsinki", 60.15, 20.03); @@ -297,7 +296,7 @@ public void dates() { var current = System.currentTimeMillis(); var dayInMillis = 24 * 60 * 60 * 1000; var start = new Date(current); - ds.delete(ds.createQuery(Dates.class)); + ds.getMapper().getCollection(Dates.class).deleteMany(new org.bson.Document()); var d = new Dates(); d.setDate(new Date(current + dayInMillis)); ds.save(d); @@ -783,16 +782,16 @@ protected boolean isReference(Path arg) { } @Override - protected DBRef asReference(Object constant) { - Key key = morphia.getMapper().getKey(constant); - return new DBRef(key.getCollection(), key); + protected DBRef asReference(Object entity) { + Object key = morphia.getMapper().getId(entity); + return new DBRef( + morphia.getMapper().getEntityModel(entity.getClass()).getCollectionName(), key); } @Override protected DBRef asReferenceKey(Class entity, Object id) { var collection = morphia.getMapper().getEntityModel(entity).getCollectionName(); - Key key = new Key(entity, collection, id); - return new DBRef(key.getCollection(), id); + return new DBRef(collection, id); } @Override @@ -819,4 +818,28 @@ protected String getKeyForPath(Path expr, PathMetadata metadata) { return super.getKeyForPath(expr, metadata); } } + + @Test + public void userJoinTest() { + final QUser friend = new QUser("friend"); + + // Setup: Create and save users with friends + User user1 = addUser("Alice", "Johnson"); + User user2 = addUser("Bob", "Smith"); + User user3 = addUser("Charlie", "Brown"); + + user1.addFriend(user2); + user2.addFriend(user3); + + ds.save(user1); + ds.save(user2); + ds.save(user3); + + // Query: Find users who have a friend named "Bob" using join + var results = where().join(user.friends, friend).on(friend.firstName.eq("Bob")).fetch(); + + // Assert: Verify the results + assertThat(results).hasSize(1); + assertThat(results.get(0).get("firstName")).isEqualTo("Alice"); + } } From 69ef8317b188065a276aa3aaaf7270817b7d1e16 Mon Sep 17 00:00:00 2001 From: Kamil Krzywanski Date: Tue, 6 May 2025 01:25:21 +0200 Subject: [PATCH 6/7] ISSUE #1060 - step 3 - bump morphia to 2.4.18 and mongo to 4.11.5 --- pom.xml | 4 ++-- .../querydsl/mongodb/document/DocumentUtils.java | 15 +++++++++++++++ .../querydsl/mongodb/morphia/MorphiaQuery.java | 4 ++-- .../mongodb/morphia/MorphiaSerializer.java | 4 ++-- .../mongodb/MongodbGeoSpatialQueryTest.java | 3 +-- .../com/querydsl/mongodb/MongodbJoinTest.java | 2 +- .../mongodb/MongodbPolymorphicCollectionTest.java | 6 +++--- .../com/querydsl/mongodb/MongodbQueryTest.java | 10 +++++----- .../mongodb/document/MongodbQueryTest.java | 10 +++++----- .../querydsl/mongodb/domain/MongodbUserTest.java | 7 ++++--- 10 files changed, 40 insertions(+), 25 deletions(-) create mode 100644 querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/document/DocumentUtils.java diff --git a/pom.xml b/pom.xml index e577dbbae4..9ee573141f 100644 --- a/pom.xml +++ b/pom.xml @@ -120,7 +120,7 @@ 3.49.1.0 13.10.00.35 5.0.7.java11 - 4.2.2 + 4.11.5 1.0.0.RELEASE @@ -141,7 +141,7 @@ 3.5.3 1.24 2.2.3 - 2.2.0 + 2.4.18 1.37 2.1.20 2.1.20-2.0.1 diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/document/DocumentUtils.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/document/DocumentUtils.java new file mode 100644 index 0000000000..3876bce599 --- /dev/null +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/document/DocumentUtils.java @@ -0,0 +1,15 @@ +package com.querydsl.mongodb.document; + +import dev.morphia.Datastore; +import dev.morphia.mapping.Mapper; +import dev.morphia.mapping.codec.writer.DocumentWriter; +import org.bson.Document; +import org.bson.codecs.configuration.CodecRegistry; + +public class DocumentUtils { + public static Document getAsDocument(Datastore morphia, Object value) { + Mapper mapper = morphia.getMapper(); + CodecRegistry codecRegistry = morphia.getCodecRegistry(); + return DocumentWriter.encode(value, mapper, codecRegistry); + } +} diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java index 24642d7e44..f630e3f62f 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java @@ -46,7 +46,7 @@ public MorphiaQuery(Datastore datastore, EntityPath entityPath) { public MorphiaQuery(final Datastore datastore, final Class entityType) { super( - datastore.getMapper().getCollection(entityType), + datastore.getCollection(entityType), dbObject -> datastore.getMapper().getId(dbObject), new MorphiaSerializer(datastore)); this.datastore = datastore; @@ -59,6 +59,6 @@ protected FindIterable createCursor() { @Override protected MongoCollection getCollection(Class type) { - return datastore.getMapper().getCollection(type); + return datastore.getCollection(type); } } diff --git a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java index 01dbb5ed6f..f293ef6a6c 100644 --- a/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java +++ b/querydsl-libraries/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java @@ -18,6 +18,7 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.mongodb.MongodbSerializer; +import com.querydsl.mongodb.document.DocumentUtils; import dev.morphia.Datastore; import dev.morphia.annotations.Id; import dev.morphia.annotations.Property; @@ -46,8 +47,7 @@ public Object visit(Constant expr, Void context) { if (!morphia.getMapper().isMappable(value.getClass())) { return value; } - - return morphia.getMapper().toDocument(value); + return DocumentUtils.getAsDocument(morphia, value); } @Override diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java index 0c13ea3316..d26b06929a 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java @@ -46,8 +46,7 @@ public MongodbGeoSpatialQueryTest() throws UnknownHostException, MongoException @Before public void before() { - ds.getMapper().getCollection(GeoEntity.class).deleteMany(new org.bson.Document()); - ds.ensureIndexes(GeoEntity.class); + ds.getCollection(GeoEntity.class).deleteMany(new org.bson.Document()); } @Test diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java index 5345c59838..0f38fe7cbe 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbJoinTest.java @@ -39,7 +39,7 @@ public MongodbJoinTest() throws UnknownHostException, MongoException { @Before public void before() throws UnknownHostException, MongoException { - ds.getMapper().getCollection(User.class).deleteMany(new org.bson.Document()); + ds.getCollection(User.class).deleteMany(new org.bson.Document()); var friend1 = new User("Max", null); var friend2 = new User("Jack", null); var friend3 = new User("Bob", null); diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java index 4178b7ae33..3c99d5f287 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbPolymorphicCollectionTest.java @@ -36,9 +36,9 @@ public MongodbPolymorphicCollectionTest() throws UnknownHostException, MongoExce @Before public void before() throws UnknownHostException, MongoException { - ds.getMapper().getCollection(Food.class).deleteMany(new org.bson.Document()); - ds.getMapper().getCollection(Chips.class).deleteMany(new org.bson.Document()); - ds.getMapper().getCollection(Fish.class).deleteMany(new org.bson.Document()); + ds.getCollection(Food.class).deleteMany(new org.bson.Document()); + ds.getCollection(Chips.class).deleteMany(new org.bson.Document()); + ds.getCollection(Fish.class).deleteMany(new org.bson.Document()); ds.save(List.of(f1, f2, c1)); } diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index c86fc45ae6..de6464cc3d 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -85,10 +85,10 @@ public MongodbQueryTest() throws UnknownHostException, MongoException { @Before public void before() throws UnknownHostException, MongoException { - ds.getMapper().getCollection(Item.class).deleteMany(new org.bson.Document()); - ds.getMapper().getCollection(User.class).deleteMany(new org.bson.Document()); - ds.getMapper().getCollection(Country.class).deleteMany(new org.bson.Document()); - ds.getMapper().getCollection(MapEntity.class).deleteMany(new org.bson.Document()); + ds.getCollection(Item.class).deleteMany(new org.bson.Document()); + ds.getCollection(User.class).deleteMany(new org.bson.Document()); + ds.getCollection(Country.class).deleteMany(new org.bson.Document()); + ds.getCollection(MapEntity.class).deleteMany(new org.bson.Document()); tampere = new City("Tampere", 61.30, 23.50); helsinki = new City("Helsinki", 60.15, 20.03); @@ -294,7 +294,7 @@ public void dates() { var current = System.currentTimeMillis(); var dayInMillis = 24 * 60 * 60 * 1000; var start = new Date(current); - ds.getMapper().getCollection(Dates.class).deleteMany(new org.bson.Document()); + ds.getCollection(Dates.class).deleteMany(new org.bson.Document()); var d = new Dates(); d.setDate(new Date(current + dayInMillis)); ds.save(d); diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java index 253b32606f..c4e3266c50 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/document/MongodbQueryTest.java @@ -97,10 +97,10 @@ public MongodbQueryTest() throws UnknownHostException, MongoException { @Before public void before() throws UnknownHostException, MongoException { - ds.getMapper().getCollection(Item.class).deleteMany(new org.bson.Document()); - ds.getMapper().getCollection(User.class).deleteMany(new org.bson.Document()); - ds.getMapper().getCollection(Country.class).deleteMany(new org.bson.Document()); - ds.getMapper().getCollection(MapEntity.class).deleteMany(new org.bson.Document()); + ds.getCollection(Item.class).deleteMany(new org.bson.Document()); + ds.getCollection(User.class).deleteMany(new org.bson.Document()); + ds.getCollection(Country.class).deleteMany(new org.bson.Document()); + ds.getCollection(MapEntity.class).deleteMany(new org.bson.Document()); tampere = new City("Tampere", 61.30, 23.50); helsinki = new City("Helsinki", 60.15, 20.03); @@ -296,7 +296,7 @@ public void dates() { var current = System.currentTimeMillis(); var dayInMillis = 24 * 60 * 60 * 1000; var start = new Date(current); - ds.getMapper().getCollection(Dates.class).deleteMany(new org.bson.Document()); + ds.getCollection(Dates.class).deleteMany(new org.bson.Document()); var d = new Dates(); d.setDate(new Date(current + dayInMillis)); ds.save(d); diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java index 17772bb357..66fe071960 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/MongodbUserTest.java @@ -15,6 +15,7 @@ import static org.assertj.core.api.Assertions.assertThat; +import com.querydsl.mongodb.document.DocumentUtils; import dev.morphia.Datastore; import dev.morphia.Morphia; import org.bson.types.ObjectId; @@ -38,7 +39,7 @@ public void map() { user.setFirstName("Jaakko"); user.addAddress("Aakatu", "00300", tampere); - assertThat(morphia.getMapper().toDocument(user)).isNotNull(); + assertThat(DocumentUtils.getAsDocument(morphia, user)).isNotNull(); } @Test @@ -49,7 +50,7 @@ public void friend() { var user = new User(); user.setFriend(friend); - assertThat(morphia.getMapper().toDocument(user)).isNotNull(); + assertThat(DocumentUtils.getAsDocument(morphia, user)).isNotNull(); } @Test @@ -60,6 +61,6 @@ public void friends() { var user = new User(); user.addFriend(friend); - assertThat(morphia.getMapper().toDocument(user)).isNotNull(); + assertThat(DocumentUtils.getAsDocument(morphia, user)).isNotNull(); } } From b6fc05b1858528100c0a729e28e1129f3cfe889e Mon Sep 17 00:00:00 2001 From: Kamil Krzywanski Date: Tue, 6 May 2025 01:45:37 +0200 Subject: [PATCH 7/7] ISSUE #1060 - step 3 - bump morphia to 2.4.18 and mongo to 4.11.5 - revert ensure indexes --- .../java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java index d26b06929a..c3ffcd2d0d 100644 --- a/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java +++ b/querydsl-libraries/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbGeoSpatialQueryTest.java @@ -47,6 +47,7 @@ public MongodbGeoSpatialQueryTest() throws UnknownHostException, MongoException @Before public void before() { ds.getCollection(GeoEntity.class).deleteMany(new org.bson.Document()); + ds.ensureIndexes(); } @Test