2010-02-15 4 views
2

est là une manière spéciale avec Gorm pour cartographier une relation à trois classes de domaine comme celui-ci:Trois classes domaine relation GORM

1 person belongs to N companies with M given roles (one or more roles for a given company) 

Merci à l'avance.

Répondre

2

regardez http://www.grails.org/Many-to-Many+Mapping+without+Hibernate+XML (je pense que c'est à jour).

connaître: http://codedumpblog.blogspot.com/2010/02/grails-many-to-many-with-lists.html

le code ci-dessous fonctionne pour moi en utilisant Grails 1.2.0. mais il semble que je devais faire beaucoup de save(). ne pas oublier de faire les contrôleurs et mettre échafaudage = domain_class

package p 

class Company { 
    String toString() { "$name" 
    } 
    static hasMany=[roles:Role] 
    static constraints = { 
    } 
    String name 
} 

package p 

class Role { 
    String toString() { "$name" 
    } 
    static belongsTo=[company:Company] 
    static hasMany=[personRoleAssociations:PersonRoleAssociation] 
    static constraints = { 
    } 
    String name 
} 

package p 

class Person { 
    String toString() { "$name" 
    } 
    static hasMany=[personRoleAssociations:PersonRoleAssociation] 
    static constraints = { 
    } 
    String name 
} 

package p 

class PersonRoleAssociation { 
    String toString() { "${person.name} as ${role.name}" 
    } 
     static belongsTo=[person:Person,role:Role] 
    static constraints = { 
    } 
} 


import p.* 
class BootStrap { 

    def init = { servletContext -> 
     Person dick=new Person(name:'dick') 
     Person jane=new Person(name:'jane') 
     dick.save() 
     jane.save() 
     Company ibm=new Company(name:'ibm') 
     ibm.save() 
     Role ibmManager=new Role(name:'ibmmanager') 
     Role ibmPeon=new Role(name:'ibmpeon') 
     ibm.addToRoles(ibmManager) 
     ibmManager.save() 
     ibm.addToRoles(ibmPeon) 
     ibmPeon.save() 
     ibm.save() 
     Company sun=new Company(name:'sun') 
     sun.save() 
     Role sunManager=new Role(name:'sunmanager') 
     Role sunPeon=new Role(name:'sunpeon') 
     sun.addToRoles(sunManager) 
     sunManager.save() 
     sun.addToRoles(sunPeon) 
     sunPeon.save() 
     sun.save() 
     PersonRoleAssociation dickManager=new PersonRoleAssociation() 
     dick.addToPersonRoleAssociations(dickManager) 
     ibmManager.addToPersonRoleAssociations(dickManager) 
     PersonRoleAssociation dickPeon=new PersonRoleAssociation() 
     dick.addToPersonRoleAssociations(dickPeon) 
     sunPeon.addToPersonRoleAssociations(dickPeon) 
     PersonRoleAssociation janeManager=new PersonRoleAssociation() 
     jane.addToPersonRoleAssociations(janeManager) 
     sunManager.addToPersonRoleAssociations(janeManager) 
     PersonRoleAssociation janePeon=new PersonRoleAssociation() 
     jane.addToPersonRoleAssociations(janePeon) 
     ibmPeon.addToPersonRoleAssociations(janePeon) 
    } 
    def destroy = { 
    } 
} 
1

Je voudrais essayer:

class Person { 
    String name 
    Set<Role> roles 
    Set<Company> companies 

    public String toString() { 
    return name + " roles : " + (roles.collect { it.name }).toString() + " - companies : " + (companies.collect { it.name }).toString() 
    } 

    static hasMany = [companies:Company, roles:Role] 
    static constraints = { 
    name (unique:true) 
    roles (nullable:true) 
    } 
} 


class Role { 
    String name 
    String toString() { 
    return name + " companies : " + (companies.collect { it.name }).toString() 
    } 
    static hasMany = [companies : Company] 
    static belongsTo = Company 
    static constraints = { 
    name (unique:true) 
    companies (nullable:false) 
    } 
} 

class Company { 
    String name 
    String toString() { 
    return name + " roles : " + (roles.collect { it.name }).toString() 
    } 
    static hasMany = [roles : Role] 
    static constraints = { 
    name (unique:true) 
    roles (nullable:true) 
    } 
} 

n'a pas testé ... mais je serais intéressé à savoir si ma solution a tous les problèmes et ce qu'ils peuvent être ...

Questions connexes