MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

ConversionFailedException:Das Beibehalten eines DBObjects, aber das Abrufen gibt eine LinkedHashMap zurück

Ihr Fehler ist wahrscheinlich genau das, was in Ihrer Ausnahme steht:eine ConversionFailed Exception verursacht durch jemanden/etwas, das versucht, von ArrayList zu konvertieren zu einer LinkedHashMap; aber dafür gibt es einfach keinen passenden Konverter (ConverterNotFoundException ).

wo genau das passiert, ist unmöglich zu sagen, da Sie nur sehr wenig Code gepostet haben. Ich kann den String "myString" in Ihrem Code nicht finden, aber er wird im Fehler erwähnt.

Spring Data verwendet normalerweise Konverter in seinem Mapping-Prozess. Um mehr Kontrolle über den Mapping-Prozess zu haben, ziehen es einige Leute vor, einen benutzerdefinierten Konverter für ihre Klassen zu implementieren und zu registrieren.

Informationen zu Konvertern finden Sie hier

http://docs.spring.io/spring-data/data-mongo/docs/current/reference/html/mongo.core.html#mongo.custom-converters

und hier

http://docs .spring.io/spring/docs/current/spring-framework-reference/html/validation.html#core-convert

vielleicht reicht dir das schon, um den Fehler selbst zu beheben.

Bearbeiten:ein kurzer Kommentar zu dieser Zeile:

potentialCandidatesObj.setPotentialcandidates((DBObject)JSON.parse(valStr));

Sie wandeln in DBObject um, bevor Sie den Setter aufrufen, da der Setter ein DBObject übernimmt. Das ist schlecht, Sie sollten einen anderen Setter für JSON erstellen und dort das Casting durchführen, oder Sie werden diesen Casting-Vorgang am Ende überall in Ihrem Code durchführen. das ist nicht sehr TROCKEN.

Es gibt auch etwas namens DBRefs in Spring Data:The mapping framework doesn't have to store child objects embedded within the document. You can also store them separately and use a DBRef to refer to that document. When the object is loaded from MongoDB, those references will be eagerly resolved and you will get back a mapped object that looks the same as if it had been stored embedded within your master document. Sie könnten dies einem eingebetteten DBObject vorziehen.