我有两个域:用户和任务,例如:
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)的正确关系?
谢谢:)
答案 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
]
}