1

我是 grails 的新手,目前正在尝试映射一个 Employee 类。每个员工可能有也可能没有经理。此外,每个员工(如果他是经理)都会有一个下属列表。使用 hasMany 和 belongsTo 静态数组映射到这个程度相对容易。但是,我的示例具有额外的复杂性。我的员工类中有 3 列:

  • id(主键)
  • ldapId(旧 ldap 系统的 id)
  • managerLdapId(来自遗留系统的经理关系 ID)。

到目前为止,我的 Employee 类看起来像这样 -

class Employee {
    String firstname
    String lastname
    String email
    String ldapId
    Employee manager

    static hasMany = [subordinates: Employee]
    static belongsTo = [manager: Employee]
}

问题是我想使用 ldapId 字段映射我的 hasMany 关系,但 grails 将其默认为 id 字段。我本可以将 ldapId 字段作为主键,但 id 字段也存在,它是该表的自然主键。

我知道hibernate有一个我们可以在定义多对一关系时指定的选项。正是 property-ref 属性允许将关系映射到除主键之外的列。这样的属性是否可用于 grails?如果是这样,如何实施?

总而言之,我需要知道如何将 hasMany 关系与该表的主键以外的键映射。

4

1 回答 1

0

我认同:

class Employee {
  String firstname
  String lastname
  String email
  String ldapId
  Employee manager

  static hasMany = [subordinates: Employee]
  static belongsTo = [manager: Employee]

  static transients = ['getId', 'setId']

  def getId() { ldapId }
  def setId(id) { this.ldapId = id }

  static mapping = {
    table 'Employee'
    id generator:'assigned', name:'ldapId', type:'string'
    ...
  }
}

不要忘记使 ldapId 唯一

于 2011-11-17T13:13:31.207 回答