Grails eins zu eins Relation

8

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?

    
mrok 20.07.2012, 00:30
quelle

2 Antworten

13

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

    
David Genn 27.07.2012, 04:36
quelle
-1

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.

Zypern

für die Viele-zu-eins / eins-zu-eins-Zuordnungen


Ich hoffe, es hilft:)

    
axierjhtjz 20.07.2012 06:17
quelle

Tags und Links