我有一个域类(我们称之为安全性),它需要与另一个域类(我们称为角色)三个“一对多”的关系。这三个关系是“当前”,“先前”和"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/

10-10 15:32