3 Stimmen

Mehrere Assoziationen in Grails

Ich habe eine Grails-App mit einer Domain Restaurant und einer Domain Person.

class Restaurant {
  String name

  static belongsTo = [ owner: Person ]
}

class Person {
  String name

  static hasMany = [ favoriteRestaurants : Restaurant ]
}

Mein Problem ist, dass GORM nur zwei Tabellen erstellt, Restaurant und Person, wobei Restaurant eine owner_id hat. Was mir jedoch fehlt, ist die Join-Tabelle, die die Lieblingsrestaurants einer Person mit ihr verknüpft.

Ich kann verstehen, warum GORM es so macht (bidirektional one-to-many), aber ich kann nicht herausfinden, wie ich es so machen kann, wie ich es möchte (1x unidirektional one-to-many, 1x unidirektional many-to-one). Ich denke, ich sollte verwenden mappedBy aber ich weiß nicht, was ich ihm zuordnen soll, da es keine Rückverknüpfung gibt :-(

Darüber hinaus habe ich zunächst die folgenden Bereiche in Betracht gezogen:

class Restaurant {
  String name

  static belongsTo = [ owner: Person ]
  static hasMany = [ outstandingCouponOwners : Person ]
}

class Person {
  String name

  static hasMany = [ favoriteRestaurants : Restaurant ]
}

wo es eine weitere eins-zu-viele-Beziehung gibt (und auch hier gibt es nichts, was man auf der anderen Seite zuordnen könnte)

2voto

Stefan Armbruster Punkte 38809

Ich denke, Sie müssen die statische Karte 'mappedBy' einer Domänenklasse verwenden. Einzelheiten finden Sie am Ende von Abschnitt 5.2.1.2 des Grails-Referenzhandbuchs. Es könnte notwendig sein, zusätzliche Einträge in Person's hasMany einzuführen: die Liste der Restaurants, die der Person gehören. Versuchen Sie den folgenden (völlig ungetesteten) Code:

class Restaurant {
  String name

  static belongsTo = [ owner: Person ]
  static hasMany = [ outstandingCouponOwners : Person ]
}

class Person {
  String name

  static hasMany = [ favoriteRestaurants : Restaurant, owns: Restaurant, coupons: Restaurant ]
  static mappedby = [ owns: 'owner', coupons: 'outstandingCouponOwners' ]
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X