MorphiaOrg / morphia

MongoDB object-document mapper in Java based on https://github.com/mongodb/mongo-java-driver
Apache License 2.0
1.65k stars 456 forks source link

ClassNotFoundException when using lazy option of @Reference #3169

Closed TomCapelle closed 2 months ago

TomCapelle commented 2 months ago

Hi !

First of all, I wanted to thank @evanchooly & contributors for this handy mongo ODM.

Therefore, I encounter an issue when I try to query an Entity declared as follows

@Entity("regions")
@Getter @Setter
@NoArgsConstructor
public class Region {

    @Id
    private String id;
    private String name; // Pretty name sent to player
    private String worldName;
    private String wgRegionId;

    @Reference(lazy = true)
    private List<TravelPoint> travelPoints = new ArrayList<>();
    private Map<String, String> defaultTravels = new HashMap<>();

Let's say I'm performing a query such as

datastore.find(Region.class).stream().toList()

I get this error:

dev.morphia.mapping.MappingException: Could not create type
        at dev.morphia.mapping.codec.references.ReferenceCodec.createProxy(ReferenceCodec.java:281) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.references.ReferenceCodec.fetch(ReferenceCodec.java:366) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.references.ReferenceCodec.decode(ReferenceCodec.java:192) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at org.bson.codecs.DecoderContext.decodeWithChildContext(DecoderContext.java:96) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.pojo.EntityDecoder.decodeModel(EntityDecoder.java:68) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.pojo.EntityDecoder.decodeProperties(EntityDecoder.java:89) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.pojo.EntityDecoder.decode(EntityDecoder.java:48) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.pojo.MorphiaCodec.decode(MorphiaCodec.java:76) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.pojo.EntityDecoder.decode(EntityDecoder.java:53) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.pojo.MorphiaCodec.decode(MorphiaCodec.java:76) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:87) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:42) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at org.bson.internal.LazyCodec.decode(LazyCodec.java:53) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:104) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:63) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:87) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:42) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.ReplyMessage.<init>(ReplyMessage.java:48) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.InternalStreamConnection.getCommandResult(InternalStreamConnection.java:567) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:461) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:372) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:114) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:765) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:76) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:209) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:115) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:83) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:74) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.connection.DefaultServer$OperationCountTrackingConnection.command(DefaultServer.java:299) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.SyncOperationHelper.createReadCommandAndExecute(SyncOperationHelper.java:273) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.FindOperation.lambda$execute$1(FindOperation.java:325) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.SyncOperationHelper.lambda$withSourceAndConnection$0(SyncOperationHelper.java:127) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.SyncOperationHelper.withSuppliedResource(SyncOperationHelper.java:152) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.SyncOperationHelper.lambda$withSourceAndConnection$1(SyncOperationHelper.java:126) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.SyncOperationHelper.withSuppliedResource(SyncOperationHelper.java:152) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.SyncOperationHelper.withSourceAndConnection(SyncOperationHelper.java:125) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.FindOperation.lambda$execute$2(FindOperation.java:322) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.SyncOperationHelper.lambda$decorateReadWithRetries$12(SyncOperationHelper.java:292) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.async.function.RetryingSyncSupplier.get(RetryingSyncSupplier.java:67) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.FindOperation.execute(FindOperation.java:333) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.internal.operation.FindOperation.execute(FindOperation.java:73) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:153) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:130) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:90) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.query.MorphiaQuery.prepareCursor(MorphiaQuery.java:372) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.query.MorphiaQuery.iterator(MorphiaQuery.java:228) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.query.Query.stream(Query.java:452) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.query.Query.stream(Query.java:441) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at fr.vinderland.runecore.modules.travel.TravelModule.getRegionByLocation(TravelModule.java:75) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at fr.vinderland.runecore.modules.travel.listeners.RegionListener.onPlayerJoin(RegionListener.java:107) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor207.execute(Unknown Source) ~[?:?]
        at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:81) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:git-Paper-497]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.20.4.jar:git-Paper-497]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[paper-1.20.4.jar:git-Paper-497]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615) ~[paper-api-1.20.4-R0.1-SNAPSHOT.jar:?]
        at net.minecraft.server.players.PlayerList.placeNewPlayer(PlayerList.java:345) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.server.network.ServerConfigurationPacketListenerImpl.handleConfigurationFinished(ServerConfigurationPacketListenerImpl.java:134) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.network.protocol.configuration.ServerboundFinishConfigurationPacket.handle(ServerboundFinishConfigurationPacket.java:18) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.network.protocol.configuration.ServerboundFinishConfigurationPacket.a(ServerboundFinishConfigurationPacket.java:9) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:54) ~[?:?]
        at net.minecraft.server.TickTask.run(TickTask.java:18) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?]
        at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
        at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1465) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:194) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:123) ~[?:?]
        at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1442) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1365) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:133) ~[?:?]
        at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1343) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1232) ~[paper-1.20.4.jar:git-Paper-497]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[paper-1.20.4.jar:git-Paper-497]
        at java.lang.Thread.run(Unknown Source) ~[?:?]
Caused by: java.lang.IllegalArgumentException: Could not create type
        at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:170) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:399) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:190) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:410) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.references.ReferenceCodec.createProxy(ReferenceCodec.java:272) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        ... 76 more
Caused by: java.lang.NoClassDefFoundError: dev/morphia/mapping/codec/references/MorphiaProxy
        at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
        at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.access$300(ByteArrayClassLoader.java:57) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:687) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:639) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at java.security.AccessController.doPrivileged(Unknown Source) ~[?:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.doPrivileged(ByteArrayClassLoader.java) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:406) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
        at java.lang.Class.forName0(Native Method) ~[?:?]
        at java.lang.Class.forName(Unknown Source) ~[?:?]
        at java.lang.Class.forName(Unknown Source) ~[?:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.load(ByteArrayClassLoader.java:361) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$WrappingDispatcher.load(ClassLoadingStrategy.java:367) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default.load(ClassLoadingStrategy.java:148) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:101) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:6325) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.references.ReferenceCodec.makeProxy(ReferenceCodec.java:343) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:168) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:399) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:190) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:410) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.references.ReferenceCodec.createProxy(ReferenceCodec.java:272) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        ... 76 more
Caused by: java.lang.ClassNotFoundException: dev.morphia.mapping.codec.references.MorphiaProxy
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:404) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
        at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
        at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.access$300(ByteArrayClassLoader.java:57) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:687) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader$ClassDefinitionAction.run(ByteArrayClassLoader.java:639) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at java.security.AccessController.doPrivileged(Unknown Source) ~[?:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.doPrivileged(ByteArrayClassLoader.java) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.findClass(ByteArrayClassLoader.java:406) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
        at java.lang.Class.forName0(Native Method) ~[?:?]
        at java.lang.Class.forName(Unknown Source) ~[?:?]
        at java.lang.Class.forName(Unknown Source) ~[?:?]
        at net.bytebuddy.dynamic.loading.ByteArrayClassLoader.load(ByteArrayClassLoader.java:361) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default$WrappingDispatcher.load(ClassLoadingStrategy.java:367) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.loading.ClassLoadingStrategy$Default.load(ClassLoadingStrategy.java:148) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.TypeResolutionStrategy$Passive.initialize(TypeResolutionStrategy.java:101) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.dynamic.DynamicType$Default$Unloaded.load(DynamicType.java:6325) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.references.ReferenceCodec.makeProxy(ReferenceCodec.java:343) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:168) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:399) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache.findOrInsert(TypeCache.java:190) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at net.bytebuddy.TypeCache$WithInlineExpunction.findOrInsert(TypeCache.java:410) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        at dev.morphia.mapping.codec.references.ReferenceCodec.createProxy(ReferenceCodec.java:272) ~[RuneCore-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
        ... 76 more

This Caused by: java.lang.ClassNotFoundException: dev.morphia.mapping.codec.references.MorphiaProxy is quite disturbing. All my dependencies are bundled in the final jar so in theory, it should be present.

I am using morphia-core v2.4.14 (latest this day I think).

I see in this documentation (https://morphia.dev/morphia/2.4/references.html) that the experimental API for references is not documented anymore, I don't know if using it would fix my problem.

Thanks by advance for any help provided.