我有一个域类(我们称之为安全性),它需要与另一个域类(我们称为角色)三个“一对多”的关系。这三个关系是“当前”,“先前”和"new"。
基本上,我希望做这样的事情(实际上它更复杂,但这确实可以说明问题):
class Security
{
static hasMany = [current: Role, previous: Role, new: Role]
Set current
Set previous
Set new
}
class Role
{
static belongsTo = [security: Security]
String name
}
不幸的是,由于Role域类仅映射到一个表,并且该表仅具有Security类的ID的一列,因此类似的操作不起作用。
是否可以不创建三个单独的Role类,而是将一个类映射到多个表而实现?
我还在研究是否可能在Role类中简单地包含一个标志,以表明该角色是当前角色,先前角色还是新角色,并且在Security类中仅具有一个“一对多”关系。但是,这种方法会导致数据绑定(bind)问题,因为我的HTML表单需要针对每个角色发送两个信息(name属性和type)。由于这些角色在HTML select语句中列出,因此我只能发送一条信息(名称)。
最佳答案
如果您不依赖belongsTo
中的Role
(必须将其删除),则可以使用 joinTable
:
class Security {
static hasMany = [current: Role, previous: Role, next: Role]
static mapping = {
current joinTable: [name:'current']
previous joinTable: [name:'previous']
next joinTable: [name:'next']
}
}
关于grails - Grails-映射和数据绑定(bind)同一域类的多个集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25088471/