zu behandeln Ich habe eine MyParameter
Klasse und eine MyParameterValue
Klasse definiert wie folgt:Kraft GORM Eins-zu-eins-Beziehungen als unabhängige
class MyParameter {
MyParameterValue defaultValue
static belongsTo = [anotherObject: AnotherDomainClass]
}
class MyParameterValue {
MyParameter valueOf
}
Mein Problem ist, dass GORM besteht darauf, dies zu einer Eins-zu behandeln eine Beziehung mit Rückverweis, was ich nicht will. Es hat Auswirkungen auf die Aktualisierung von Parametern.
Beispiel:
def param = new MyParameter(defaultValue: new MyParameterValue()).save()
def paramVal = new MyParameterValue (valueOf: param).save()
assert param.defaultValue != paramVal
Dieser Code führt ein AssertionFailure
. Also was ist passiert? Obwohl es sollte klar sein, dass ich nicht den Standardwert von param
in der zweiten Zeile zu ändern, habe gemeint, aktualisiert GORM es, als ob defaultValue
mit valueOf
in MyParameterValue
, synchronisieren werden mußten tatsächlich
So GORM verwandelt, was ich will:
in das:
Hier sind meine zwei Fragen:
- Was ist der Zweck des
hasOne
Schlüsselwort, wenn alle Referenzen, die vom Typ Sicht Referenzen aussehen, wie zurück, als ohnehin eine Eins-zu-Eins-Beziehung behandelt werden? - Wie kann ich GORM zwingen,
valueOf
nicht als Rückverweis vondefaultValue
zu behandeln? Beachten Sie, dass ich das Kaskadierungsverhalten nicht ändern möchte: das Ändern derdefaultValue
einerMyParameter
sollte kaskadiert werden.
aktualisieren
Ich bin oben auf die Frage in einer Antwort noch interessiert. Die Lösung, die ich verwendete, war, Standardwerte ihre eigene Klasse MyDefaultValue
zu geben. Wie Sie sich vorstellen können, ist MyParameterValue
eine komplizierte Struktur und ich suchte nach einer Möglichkeit, diese Struktur zu duplizieren.
OK, mir war nicht bewusst, dass "Nullable" einen Einfluss auf die Rückverweise hat. Ich werde das versuchen. – Antoine
Beachten Sie das Fehlen von AngiesTo – sbglasius
Es gibt keine AngleTo in der Beziehung in meinem Beispiel beteiligt. – Antoine