2009-10-31 3 views
3

J'ai une application Grails avec un domaine Restaurant et un domaine Personne.Plusieurs associations dans les grails

class Restaurant { 
    String name 

    static belongsTo = [ owner: Person ] 
} 

class Person { 
    String name 

    static hasMany = [ favoriteRestaurants : Restaurant ] 
} 

Mon problème est que GORM crée seulement deux tables, Restaurant et Person, où Restaurant a un owner_id. Cependant ce qui me manque est la table de jointure qui lie les restaurants préférés d'une personne à lui.

Je peux comprendre pourquoi GORM le fait de cette façon (bidirectionnel un-à-plusieurs), mais je ne peux pas comprendre comment le faire comme je le veux (1x unidirectionnel un-à-plusieurs, 1x unidirectionnel plusieurs à une). Je suppose que je devrais utiliser mappedBy mais je ne sais pas quoi la carte à car il n'y a rien qui relie en arrière :-(

De plus, je considérais d'abord les domaines suivants:

class Restaurant { 
    String name 

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

class Person { 
    String name 

    static hasMany = [ favoriteRestaurants : Restaurant ] 
} 

où il y a une autre relation un-à-plusieurs (et encore une fois avec rien à mapper à l'autre extrémité)

Répondre

2

Je pense que vous devez utiliser la mappe statique 'mappedBy' d'une classe de domaine.Pour plus de détails, regardez au bas de section 5.2.1.2 du guide de référence des grails Il pourrait être nécessaire d'introduire Dans la liste des restaurants appartenant à la personne. Effectuez les opérations suivantes (complètement non testé) 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' ] 
} 
+0

j'ai eu un à plusieurs une autre relation, et pour votre suggestion de travailler que je devais changer pour « belongsTo statique = personne » et ajouter « Personne propriétaire » à la place. Aussi ajouté un hasMAny inverse pour les restaurants préférés ainsi que le mappedBy pour la classe Restaurant. Mais alors ça a marché – Steve

Questions connexes