0

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

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)的正确关系的想法吗?

谢谢 :)

4

2 回答 2

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]
}
于 2013-05-29T13:29:09.427 回答
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
  ]
}
于 2013-05-29T15:34:51.333 回答