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

在grails中定义一对多和多对多关系,grails,many-to-many,gorm,one-to-many,Grails,Many To Many,Gorm,One To Many,我有两个域:用户和任务,例如: 1) 用户可以是许多任务的作者 2) 一个用户可以参与多个任务,同时,一个任务可以有多个用户参与 因此,我想定义1)的一对多和2)的多对多 我想我必须定义我的多对多关系的所有者方(assignedTasks assgnedUsers) ? 有人知道如何定义满足我的规范1)和2)的正确关系吗 谢谢:)我想你可以用一种更简单的方法来完成: 事实上,这种关系可能就在这项任务中。做你想做的事情的唯一原因是建立一种双向关系。通过在用户上声明方法以获取所需的对象,可以更简单地

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

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

2) 一个用户可以参与多个任务,同时,一个任务可以有多个用户参与

因此,我想定义1)的一对多和2)的多对多

我想我必须定义我的多对多关系的所有者方(assignedTasks assgnedUsers) ? 有人知道如何定义满足我的规范1)和2)的正确关系吗


谢谢:)

我想你可以用一种更简单的方法来完成:

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

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]
}
用户{
设置getCreatedTasks(){
Task.findAllByAuthor(此)
}
设置getAssignedTasks(){
Task.executeQuery(“”)
选择t
从任务t以tu的身份加入t.assignedUsers
其中tu=:user
“”,[用户:此])
}
}
任务{
用户作者
static hasMany=[assignedUsers:User]
}

试试这个。请注意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
  ]
}
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
  ]
}