Spring Data MongoDb für die Klassenvererbung

9

Ich möchte verschiedene Daten in einer Sammlung in MongoDb speichern und Spring-Datenbeans mit dem entsprechenden Feld haben.

Tut mir leid, ich habe Details übersprungen.

Übergeordnete Bean:

%Vor%

Kinder:

%Vor%

Also, es gibt folgendes Dokument in Mongo

%Vor%

Wenn ich Daten abrufe, ist es in Ordnung. Aber wenn ich die Methode save von CrudRepository für B aufrufe, schreibt sie alle Daten neu und ich verliere C.

Ich kenne nur eine gute Option, um benutzerdefinierte Speichermethoden mit inkrementellen Updates zu erstellen, z. B.

%Vor%

aber mit Reflexion.

Haben Sie noch andere Ideen?

Vielen Dank im Voraus.

    
Pavel Drobushevich 09.01.2012, 19:28
quelle

1 Antwort

5

Für Spring-data MongoTemplate, zusätzlich zu den Feldern in Ihrem Objekt, ein Außerdem wird der zusätzliche Feldname _class gespeichert, der der Vorlage mitteilt, welche Klasse sie speichert.
Sie können ein Objekt nicht korrekt mit dem Repository eines anderen Objekts speichern, ungeachtet der Vererbungsbeziehung.

Das CrudRepository for Spring ist im Wesentlichen das generische Dao-Muster. Da all Ihre Dao die Schnittstelle implementieren und über die Speichermethode verfügen, können Sie jedes Objekt speichern, indem Sie wissen, welcher Dao verwendet werden soll.

Um dies zu tun, können Sie eine RepositoryFactory erstellen, mit der Ihr Repository initialisiert wird, das eine getRepository (Class type) -Funktion bietet, die Ihnen das passende Repository für Ihre Klasse zur Verfügung stellt. Dann können Sie etwas tun wie:

%Vor%

Hier finden Sie weitere Einzelheiten: Ссылка

Wenn Sie alle Ihre Objekte in derselben Sammlung speichern möchten, können Sie die Annotation @Document (collection="mycollection") verwenden. Wenn Sie keinen Sammlungsnamen angeben, wird standardmäßig jede Klasse in einer separaten Sammlung entsprechend dem Klassennamen gespeichert.

    
ltfishie 18.02.2012 15:45
quelle