Ich habe versucht, die Beziehung eins zu eins auf zwei verschiedene Arten zu definieren:
Grails 2.0.3
Fall 1:
%Vor%Fall 2:
%Vor%sieht ähnlich aus und beide bieten eins-zu-eins-bidirektionales Mapping. Leider hat DB in beiden Fällen eine unterschiedliche Struktur.
Fall 1:
Fall 2:
Warum einmal Auto und einmal Motor Verbindung zum zweiten Tisch hält.
Wo ist mein Problem? Wenn ich mir den Code anschaue, deuten beide Fälle aus DDD-Sicht darauf hin, dass Car-Klasse wichtiger ist und Auto-Aggregate-Engine. Leider, wenn ich von DB-Seite auf Fall 2 schaue, würde ich lieber sagen, dass es entgegengesetzt ist - Motoraggregat Car. Natürlich kann ich den ersten Ansatz verwenden, aber die meisten Veröffentlichungen, die ich über die Grals gesehen habe, sind der zweite Weg, um die Beziehung zu definieren. Vielleicht habe ich etwas falsch verstanden und ich nutze hasOne falsch?
In der Dokumentation zu hasOne
wird angegeben, dass die Verwendung dieser Option eine bidirektionale Erstellung ermöglicht Eins-zu-Eins-Beziehung, bei der der Fremdschlüssel auf dem Kind liegt.
Die belongsTo
bedeutet, dass Aktionen, die am übergeordneten Element ausgeführt wurden (z. B. speichern und update) wird vom Ruhezustand zum Kind kaskadiert.
Wenn Sie also möchten, dass der Fremdschlüssel in Engine
ist, verwenden Sie static hasOne = [engine:Engine]
in Car
.
Wenn der Fremdschlüssel in Car
sein soll, verwenden Sie Engine engine
in Car
.
Verwenden Sie in beiden Fällen belongsTo = [car: Car]
auf Engine
Ich denke, Sie sollten versuchen, diesen Ansatz zu machen.
%Vor%Ich denke, das wird es schaffen. Sie können es hier lesen:
Standardmäßig würde die Adresszuordnung einer Fremdschlüsselspalte zugeordnet namens address_id.
für die Viele-zu-eins / eins-zu-eins-Zuordnungen
Ich hoffe, es hilft:)