2017-02-18 37 views
0

当孩子类可能属于父级(但不是两者)中的两个属性之一时,我无法在Grails中掌握belongsTo - hasMany关系的概念。grails belongsTo映射到另一个类中的属性

例如:

class Store { 
    Integer storeNumber 
    List employees 
    List managers 

    static hasMany = [employees:Person, 
         managers:Person] 
} 

class Person { 
    String name 
    String roll 

    static belongsTo = [store:Store] 

    static constraints = { 
     role inList: ['employee','manager'] 
    } 
} 

哪里人在Store.employees的名单或Store.managers

我在地图上的人得到一个错误,有“重复列的列表。 ..“。我尝试了一些静态映射尝试,但仍不理解如何正确执行。

我该如何正确映射这个?

在此先感谢....

回答

0
class Store { 
    Integer storeNumber 
    //List employees 
    //List managers 

    static hasMany = [employees:Person, 
         managers:Person] 
    static constraints = { 
     employees(nullable:true) 
     managers(nullable:true) 
    } 
} 

class Person { 
    String name 
    String roll 

    static belongsTo = [store:Store] 

    static constraints = { 
     role inList: ['employee','manager'] 
    } 
} 

现在添加商店

Store store = new Store(storeNumber: 1).save() 
if (store) { 
    Person person = new Person(name:'fred', roll:'employee', store:store).save() 
    if (person) { 
    store.addToEmployees(person) 
    } 
} 

所以很明显有头痛,增益为反向lookingup父的快捷方式,选择是松散的关系如下所述,不关心父母,所以你不需要这最后一点,并明显地松动你迄今命中的依赖性问题

结束E2A

你需要一个有其他关系

另外,如果你不关心属于关联关系,那么事情会更容易喜欢

static belongsTo = Store 

那么该因素已不再一个问题。

不同的是与你有VS我向您展示了后者目前的方法 - 你可以从一个孩子反向走回父母很容易,如果查询是从孩子

无论哪种方式,你总是可以从父母开始查询开始然后再加入儿童和寻找孩子方面

等什么套房,为您先生

最后编辑 当你在做这个东西了多年,你觉得以另一种方式做事的方法你知道:

假设您确实设置了一个从Parent to Child开始的松散/弱引用,并且您想访问Parent。这里是如何:

Class User { 
    String username 
    static hasMany=[childs:Children] 
} 

Class Children { 
    String firstName 
    static belongsTo=User 

    // now to get access back to parent user without knowing parent a hackish thing like this can be done: 

    User getUser() { 
     User.findByChilds(this) 
    } 
    String getUserName() { 
     return user?.username 
    } 

} 

现在从一个孩子,你可以做$ {} instance.user或$ {} instance.userName,那么这将绑定回父和子对象本身findByChilds(this)年前的这个本来找我猜我翘曲

+0

工作得很好!我现在看到,我不需要明确定义员工和经理的名单......因为我通过hasMany将他们带入课堂?谢谢! – dm123

+0

对不起,我犯了一个错误在那里,我修正了它简而言之,你只是获得反向查找功能作为一个松散的关系,更容易管理,但松散的能力,这种能力 – Vahid

+0

ofcourse最重要的因素是家长有空可以为hasMany,否则它是一个循环这是想要的,因为它需要这个,所以没有这个能力 – Vahid

相关问题