grails belong映射到另一个类中的属性

grails belong映射到另一个类中的属性,grails,gorm,Grails,Gorm,在Grails中,当子类可以属于父类中的两个属性之一,但不能同时属于这两个属性时,我很难理解belongsTo-hasmall关系的概念 例如: class Store { Integer storeNumber List employees List managers static hasMany = [employees:Person, managers:Person] } class Person {

在Grails中,当子类可以属于父类中的两个属性之一,但不能同时属于这两个属性时,我很难理解belongsTo-hasmall关系的概念

例如:

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列表中

我得到一个错误的人有重复列映射。。。。我尝试了一些静态映射尝试,但仍然不理解如何正确地进行映射

我如何正确地映射这个

提前谢谢

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)
  }
}
很明显,头痛带来的好处是一种快速的反向寻找父母的方法,另一种方法是下面描述的松散关系,它不关心父母,所以你不需要这最后一点,显然,你到目前为止遇到的依赖性问题是松散的

端E2A

你需要一个才能拥有另一个关系

或者,如果你不在乎关系的归属,那么事情就会变得更容易

static belongsTo = Store
那么这个因素就不再是问题了

区别在于您当前使用的方法与我向您展示的后一种方法不同——如果查询是从child启动的,那么您可以轻松地从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}这将绑定回父对象,并通过子对象本身查找被孩子查找这几年前,我猜这会让我感到不安

工作得很好!我现在明白了,我不需要明确定义员工和经理的列表……因为我是通过hasMany将他们带到类中的?谢谢抱歉,我犯了一个错误,简而言之,我修复了它,你只是获得了反向查找功能,作为一个松散的关系,更容易管理,但松散的能力,因为最重要的因素是家长有空,真的有很多,否则这是一个循环,想要那个,不能有这个,因为它需要那个