Scala, Morphia und Enumeration

9

Ich muss die Scala-Klasse in Morphia speichern. Mit Anmerkungen funktioniert es gut, wenn ich nicht versuche, die Sammlung _ & lt ;: Enumeration

zu speichern

Morphia beschwert sich, dass es keine Serialisierer für diesen Typ gibt, und ich frage mich, wie man einen bereitstellt. Im Moment habe ich den Typ der Sammlung in Seq [String] geändert und fülle ihn mit toString für jedes Element in der Sammlung.

Das funktioniert gut, aber ich bin mir nicht sicher, ob das richtig ist.

    
jdevelop 08.10.2012, 20:13
quelle

1 Antwort

1

Dieses Problem tritt bei mehreren verfügbaren Abstraktionsebenen oben auf MongoDB auf. Es kommt alles auf einen Grund zurück: Es gibt kein enum-Äquivalent in json / bson. Salat hat zum Beispiel das gleiche Problem.

Tatsächlich unterstützt der MongoDB Java-Treiber keine enums , wie Sie in der Diskussion lesen können: Ссылка wo Sie das Problem sehen können, ist noch offen. Die meisten Frameworks, in denen ich MongoDB mit Java verwendet habe, implementieren keine Low-Level-Funktionalitäten wie diese. Ich denke, dass diese Wahl sehr sinnvoll ist, weil sie Ihnen die Wahl lassen, mit Datenstrukturen umzugehen, die nicht vom Low-Level-Treiber gehandhabt werden, anstatt Ihnen den Weg zu weisen.

Im Allgemeinen habe ich das Gefühl, dass das Fehlen von Unterstützung nicht von technischen Beschränkungen, sondern eher von der Designauswahl herrührt. Für Enums gibt es mehrere Möglichkeiten, sie mit ihren Vor- und Nachteile zu verbinden, während für andere Datentypen wahrscheinlich einfacher ist. Ich kenne den MongoDB-Java-Treiber nicht im Detail, aber ich denke, die Unterstützung mehrerer "Modi" hätte etwas Refactoring erfordert (vielleicht sprechen sie deshalb von einer neuen Version der Serialisierung?)

Dies sind zwei Strategien, an die ich denke:

  • Wenn Sie eine Enumeration indizieren und Platzbelegung minimieren möchten, ordnen Sie die Enumeration einer ganzen Zahl zu (ohne die Ordinalzahl zu verwenden, bitte kann den Enum-Startwert in Java setzen ).
  • Wenn es sich bei Ihrer Anfrage um eine Abfrage auf der mongoshell handelt, weil Ihre Daten von Data Scientist abgerufen werden, speichern Sie die enum lieber mit ihrem Zeichenfolgenwert

Zusammenfassend kann festgestellt werden, dass beim Hinzufügen einer Zwischendatenstruktur zwischen Ihrem nativen Objekt und MongoDB nichts falsch ist. Salat unterstützt es durch CustomTransformers, auf Morphia vielleicht müssten Sie die Konvertierung explizit machen. Mach es.

    
Edmondo1984 04.08.2013 08:28
quelle

Tags und Links