Gibt es eine spezielle Methode, mit Gorm eine Beziehung zwischen drei Domänenklassen wie diese abzubilden?
1 person belongs to N companies with M given roles (one or more roles for a given company)
Vielen Dank im Voraus.
Gibt es eine spezielle Methode, mit Gorm eine Beziehung zwischen drei Domänenklassen wie diese abzubilden?
1 person belongs to N companies with M given roles (one or more roles for a given company)
Vielen Dank im Voraus.
Betrachten http://www.grails.org/Many-to-Many+Mapping+ohne+Hibernate+XML (ich glaube, sie ist auf dem neuesten Stand).
bewusst sein: http://codedumpblog.blogspot.com/2010/02/grails-many-to-many-with-lists.html
der Code unten funktioniert für mich mit Grails 1.2.0. aber es scheint, wie ich eine Menge von save()'s zu tun hatte. vergessen Sie nicht, die Controller zu machen und setzen scaffold=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 = {
}
}
Ich würde es versuchen:
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)
}
}
Habe ich aber nicht getestet... Mich würde interessieren, ob es bei meiner Lösung irgendwelche Probleme gibt und welche das sein können...
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.