2016-09-21 1 views

Antwort

0

Ich glaube, dass Sie die Gehört, wie diese Karte haben:

static belongsTo = [example:Example] 

Hoffe, es hilft :)

+0

, Sie müssen nicht eine 'Map' zu' belongsTo' zuweisen. Sie können eine 'Map' oder eine' Class' zuweisen. Wenn Sie eine 'Map' verwenden, dann wird in der Klasse, die das'oquiresTo'definiert, eine Rückreferenz hinzugefügt. Wenn Sie eine 'Klasse' verwenden, passiert das nicht. Siehe http://docs.grails.org/3.1.11/ref/Domain%20Classes/belongsTo.html. –

+0

Wenn Sie eine 'Map' verwenden, wird das Schema anders sein, und das mag das sein, was Sie wollen, aber es ist nicht so, dass Sie eine' Map' verwenden müssen. –

+0

Ok, aber er will den dritten Tisch loswerden, das wird es tun. Burt Beckwith erklärt mit guten Worten. –

0

Aus der Definition von hasMany Grails werden, standardmäßig Karte diese Art von Beziehung mit einem Join table.That Join-Tabelle die dritte Tabelle ist mentioned.No müssen Sie darüber Sorgen zu machen.

0

Well der one-to-many relationship wird erreicht, indem zusätzliche Tabelle (d.h. Example_ExampleData) enthält, die jeweils zwei Spalten id Felder aus den Tabellen der Einheiten bilden, die die Beziehung aufgebaut (d. Example und ExampleData).

Die neu hinzugefügte Tabelle ist untergeordnete Tabellen - Example und ExampleData.

In Ihrem Fall, wenn Sie Ihre Anwendung ausführen, wird die 3. Tabelle standardmäßig von Grails erstellt, da Ihre Tabellenbeziehung unter die one-to-many relationship fällt.

1

Der Grund für die zusätzliche Tabelle ist, dass Sie die Beziehung nur in einer Richtung modelliert haben - seinen Zugriff auf ein ExampleExampleData Instanzen über das example_array Set, die aufgrund der hasMany Eigenschaft Ihrer Klasse Bytecode hinzugefügt wird, sondern eine ExampleData Instanz hat keine Möglichkeit, seine eigenen Example zu verweisen.

Sie haben eine belongsTo Eigenschaft, sondern nur die Klassennamen angegeben. Das ist ausreichend, Eigentum zu konfigurieren, kaskadiert Löschungen usw. aber bietet keine Eigenschaft in der Klasse der Example Instanz zugreifen.

Wenn Sie es auf die andere unterstützte Syntax ändern wird es funktionieren wie erwartet:

static belongsTo = [example: Example] 

Hier example wird sein der Name eines Example Eigentum am Ende (und Sie können es ändern und/oder example_array zu jeder gültige Eigenschaftsname), die

Example example 

nun grundsätzlich die gleichen wie erklären ist, dass beide Seiten der andere zugreifen können, ist die Beziehung bidirektional und müssen Sie nicht mehr die dritte Tabelle. Das liegt daran, dass eine 1-many normalerweise mithilfe eines Fremdschlüssels in der untergeordneten Tabelle implementiert wird, in diesem Fall in der Tabelle für ExampleData, die auf die Tabelle für Example verweist. Das war nicht möglich, ohne dass eine Eigenschaft in der Klasse mit dieser Spalte verbunden war, daher war die Join-Tabelle notwendig. Keine

Verwandte Themen