定义grails中的一对多和多对多关系

时间:2013-05-29 12:29:11

标签: grails many-to-many gorm one-to-many

我有两个域:用户和任务,例如:

1)用户可以是许多任务的作者

2)用户可以参与很多任务,同时,任务可以有很多参与的用户

所以,我想为1定义一对多,为2定义多对多

User{
  static hasMany = [createdTasks : Task,  //for one-to-many
                    assignedTasks : Task  //for many-to-many
                   ]

  static mappedBy = [createdTasks : author]

}

Task{

  User author
  static hasMany = [assignedUsers : User]// for many-to-many


}

我想我必须定义我的多对多关系的所有者方面(assignedTasks-assgnedUsers) ? 任何人都有想法来定义满足我的规范1)和2)的正确关系?

谢谢:)

2 个答案:

答案 0 :(得分:0)

我认为你可以更容易地实现这一目标:

真的,这种关系可以完成任务。做你想做的事的唯一原因是建立双向关系。通过在用户上声明方法来获取所需的对象,可以更简单地实现这一点。

User{
   Set<Task> getCreatedTasks() {
     Task.findAllByAuthor(this)
   }

   Set<Task> getAssignedTasks() {
     Task.executeQuery("""
       Select t
       from Task t join t.assignedUsers as tu
       where tu = :user
     """, [user: this])
   }
}

Task{
  User author
  static hasMany = [assignedUsers : User]
}

答案 1 :(得分:0)

试试这个。请注意mappedBy中的引用。

User {
  static hasMany = [
    createdTasks: Task, // for one-to-many
    assignedTasks: Task // for many-to-many
  ]
  static mappedBy = [
    createdTasks: 'author'
  ]
}

Task {
  User author
  static hasMany = [
    assignedUsers: User // for many-to-many
  ]
  static belongsTo = [
    User
  ]
}