我是grails的新手,目前我正在尝试映射一个Employee类。每位员工可能有也可能没有经理。此外,每位员工(如果他是经理)都会有一份下属列表。使用hasMany和belongsTo静态数组,映射到此范围相对容易。但是,我的例子有一个额外的复杂性。我的员工类中有3列:
截至目前,我的员工类看起来像这样 -
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关系映射到该表的主键以外的键。
答案 0 :(得分: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独一无二p>