Der Grund für die zusätzliche Tabelle ist, dass Sie die Beziehung nur in einer Richtung modelliert haben - seinen Zugriff auf ein Example
ExampleData
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
, 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. –
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. –
Ok, aber er will den dritten Tisch loswerden, das wird es tun. Burt Beckwith erklärt mit guten Worten. –