Ich habe zwei Klassen, die wie folgt aussehen:definieren Indizes unabhängig für gleiche Feld in der Kinder- und Eltern Dokumente in verschiedenen Sammlungen
@Document(collection = 'rule')
class Rule {
@Indexed(unique = true)
String name
}
@Document(collection = 'archived_rule')
class ArchivedRule extends Rule {
@Indexed(unique = false)
String name
}
Regeln sind die primäre Domain-Klasse, die meine Anwendung mit arbeitet. Nur die neueste Version jeder Regel wird in der Sammlung 'rule' gespeichert. Wenn eine Regel aktualisiert wird, wird eine Kopie davon erstellt und in der Sammlung 'archived_rule' gespeichert.
Das Namensfeld sollte in der 'rule'-Sammlung eindeutig sein. Es sollte in der 'archived_rule'-Sammlung doppelte Einträge geben können.
Definieren meiner Klassen wie ich oben habe scheint nicht zu funktionieren. Wenn ich meine Anwendung starten, erhalte ich eine Ausnahme wie folgt aus:
Caused by: org.springframework.data.mapping.model.MappingException: Ambiguous field mapping detected! Both @org.springframework.data.mongodb.core.index.Indexed(expireAfterSeconds=-1, dropDups=false, sparse=false, useGeneratedName=false, background=false, unique=true, name=, collection=, direction=ASCENDING) private java.lang.String ...Rule.name and @org.springframework.data.mongodb.core.index.Indexed(expireAfterSeconds=-1, dropDups=false, sparse=false, useGeneratedName=false, background=false, unique=false, name=, collection=, direction=ASCENDING) private java.lang.String ...ArchivedRule.name map to the same field name name! Disambiguate using @Field annotation!
Ich habe auch nicht versucht, das Namensfeld überhaupt in der ArchivedRule Klasse angibt, aber in diesem Fall erstellt es einen eindeutigen Index für die ‚name‘ Feld in der 'archived_rule'-Sammlung.
Ich habe gedacht, dass ich Rule und ArchivedRule durch Vererbung unabhängig machen konnte und dann explizit alle Felder neu definieren, die ich aus Regel in ArchivedRule speichern muss. Das möchte ich allerdings vermeiden.
Gibt es eine andere Möglichkeit, dass ich meine Klassen angeben kann, so dass Rule.name einen eindeutigen Index hat und ArchivedRule.name keinen eindeutigen Index hat?