[英]define one-to-many and many-to-many relationships in grails
我有两个域:用户和任务,如:
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)的正确关系吗?
谢谢 :)
我认为您可以通过一种更简单的方式完成此操作:
真正的关系可以只是在任务上。 做您想做的事情的唯一原因是创建双向关系。 通过在用户上声明方法以获取所需的对象,可以更轻松地实现此目的。
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]
}
尝试这个。 注意在quotedBy中的引号。
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
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.