Spring Data Mongodb - repository für die Sammlung, mit verschiedenen Arten
Habe ich ein mongo Sammlung enthalten drei Arten von Entitäten, die ich anzeigen auf java-Typen:
- Knoten
- LeafType1
- LeafType2
Sammlung ist ment zu speichern, Baumstruktur mit dbRefs der untergeordneten Knoten im übergeordneten Eintrag.
Ich nicht finden alle Informationen über den Gegenstand in Spring reference Dokumentation so Frage ich hier: gibt es eine Möglichkeit zu nutzen Repository
Mechanismus, um die Arbeit mit der Sammlung enthalten können verschiedene Arten von Objekten?
Deklarieren mehrere repositories für die verschiedenen Typen in eine Sammlung scheint nicht sehr gute Idee, weil ich immer kämpfen mit Situationen, in denen abgefragt Objekt ist nicht in der erwarteten Art und erstellen ein repository für die abstrakte Klasse, die alle möglichen Arten inherrit nicht zu funktionieren scheint.
Um zu verdeutlichen, was ich meine:
/**
* This seems not safe
*/
public interface NodeRepository extends MongoRepository<Node, String> { }
public interface LeafType1Repository extends MongoRepository<LeafType1, String> { }
public interface LeafType2Repository extends MongoRepository<LeafType2, String> { }
/**
* This doesn't work at all
*/
public interface MyCollectionRepository extends MongoRepository<AbstractMyCollectionNode, String> { }
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Knoten\LeafType1\LeafType2 sind sub-Klassen von AbstractMyCollectionNode, dann werden die Dinge einfach sein. Nur deklarieren Sie das repository wie Sie schreiben:
Wir haben dies in einem Projekt, und es funktioniert gut. Frühlings-Daten fügen Sie eine Eigenschaft mit dem Namen '_class", um die Dokumente in mongodb collection, so dass Sie finger heraus, welche Klasse instanziiert werden soll.
Dokumente, gespeichert in einer Sammlung kann einige ähnlichkeit, vielleicht können Sie extrahieren eine generische Klasse für Sie.
Hier sind einige code kopiert aus einem unserer Projekte:
Person:
Repository:
Und, wenn Sie Ihre Dokumente in mongodb collection nicht die "_class" - Eigenschaft. Sie können Konverter:
Document
. Tun Sie immer die überprüfung der zurückgegebenen Typ, um zu bestimmen, ob Sie den gewünschten Eintrag oder nicht?Frühjahr Daten über den Repository-Deklarationen als Einstiegspunkt bei der Suche nach Entity-Klassen (keine scan-Pakete für Entitäten direkt).
So alle Sie tun müssen, ist, zu erklären, eine "unbenutzte" Repository-Schnittstelle für den sub-Klassen, genau wie Sie vorgeschlagen als "unsicher" in Ihrer OP:
Haben Sie nicht verwenden die zusätzliche
LeafTypeX
repositories, kann man den Stock mit derNodeRepository
für das speichern und suchen von Objekten des TypsLeafType1
undLeafType2
. Aber die Erklärung der beiden anderen repositories erforderlich ist, so dassLeafType1
undLeafType2
gefunden werden, die als Entitäten mit ersten Scannen erfolgt.PS: all Dies unterstellt natürlich, dass Sie
@Document(collection= "nodes")
Anmerkungen auf IhreLeafType1
undLeafType2
Klassen