Polymorphe Typen mit Morphia mit oder ohne den Standard -Diskriminator nicht lesen können
Posted: 02 Apr 2025, 03:09
Ich habe also eine einfache Struktur:
Interceptor.java
Es handelt sich
xSltInterceptor.java
@Entity(discriminator = "xslt", discriminatorKey = "type")
public class XsltInterceptor extends Interceptor {
private String source;
public XsltInterceptor() {
super("xslt");
}
// getters and setters omitted...
}
< /code>
Das Dokument wird erfolgreich eingefügt, aber beim Lesen scheint es, dass Morphia es nicht deserialisieren kann. Das Dokument sieht folgt aus:
Der Fehler, den ich bekomme, ist:
Caused by: org.bson.codecs.configuration.CodecConfigurationException: Failed to decode 'Interceptor'. Decoding errored with: my.package.ScriptInterceptor
............
Caused by: dev.morphia.mapping.MappingException: my.package.ScriptInterceptor
at dev.morphia.mapping.DiscriminatorLookup.lookup(DiscriminatorLookup.java:69)
at dev.morphia.mapping.codec.pojo.EntityDecoder.getCodecFromDocument(EntityDecoder.java:105)
... 84 more
Caused by: java.lang.ClassNotFoundException: my.package.ScriptInterceptor
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
< /code>
Ich habe bereits versucht, den Standarddiskriminator (_T) zu verwenden, aber ich habe den gleichen Fehler erhalten. < /p>
Ich bin gerade wirklich verwirrt. Warum passiert das? Da die aktuelle Morphia Stable Release (2.4.15) die neuesten Versionen des Treibers (5.x) nicht unterstützt, liegt das Problem hier höchstwahrscheinlich. Wie auch immer, ich könnte mich daran halten.
Wenn jemand eine Lösung für den 2.4.15 hat, hinterlassen>
Interceptor.java
Code: Select all
@Entity(discriminatorKey = "type")
public abstract class Interceptor {
@Id
protected String id;
protected String type;
public Interceptor(String type) {
this.type = type;
}
// getters and setters omitted..
}
Code: Select all
@Entity(discriminator = "script", discriminatorKey = "type")
public class ScriptInterceptor extends Interceptor {
private String language;
private String source;
public ScriptInterceptor() {
super("script");
}
// getters and setters omitted...
}
@Entity(discriminator = "xslt", discriminatorKey = "type")
public class XsltInterceptor extends Interceptor {
private String source;
public XsltInterceptor() {
super("xslt");
}
// getters and setters omitted...
}
< /code>
Das Dokument wird erfolgreich eingefügt, aber beim Lesen scheint es, dass Morphia es nicht deserialisieren kann. Das Dokument sieht folgt aus:
Der Fehler, den ich bekomme, ist:
Caused by: org.bson.codecs.configuration.CodecConfigurationException: Failed to decode 'Interceptor'. Decoding errored with: my.package.ScriptInterceptor
............
Caused by: dev.morphia.mapping.MappingException: my.package.ScriptInterceptor
at dev.morphia.mapping.DiscriminatorLookup.lookup(DiscriminatorLookup.java:69)
at dev.morphia.mapping.codec.pojo.EntityDecoder.getCodecFromDocument(EntityDecoder.java:105)
... 84 more
Caused by: java.lang.ClassNotFoundException: my.package.ScriptInterceptor
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
< /code>
Ich habe bereits versucht, den Standarddiskriminator (_T) zu verwenden, aber ich habe den gleichen Fehler erhalten. < /p>
Ich bin gerade wirklich verwirrt. Warum passiert das? Da die aktuelle Morphia Stable Release (2.4.15) die neuesten Versionen des Treibers (5.x) nicht unterstützt, liegt das Problem hier höchstwahrscheinlich. Wie auch immer, ich könnte mich daran halten.
Wenn jemand eine Lösung für den 2.4.15 hat, hinterlassen>