2011-11-17 21 views
1

我是grails的新手,目前正試圖映射Employee類。每個員工可能有也可能沒有經理。另外,每位員工(如果他是經理)都會有一份下屬名單。使用hasMany和belongsTo靜態數組映射到這個範圍相對容易。但是,我的例子有一個額外的複雜性。我有我的員工3個列:hibernate屬性-ref等價不存在於grails中

  • 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領域,但Grails的則默認爲id字段我的hasMany關係。我可以將ldapId字段作爲主鍵,但id字段也存在,它是此表的自然主鍵。

我知道hibernate有一個選項,我們可以在定義多對一關係時指定。它是允許將關係映射到主鍵以外的列的property-ref屬性。這樣的屬性可用於Grails嗎?如果是這樣,它如何實施?總結一下,我需要知道如何映射hasMany關係與表中主關鍵字以外的其他關鍵字。

回答

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獨特

+0

感謝回答,但這並不遺憾的是解決我的問題。我需要id字段以及ldapId字段。他們都在我的數據庫中。這只是我需要id字段作爲主鍵,而ldapId字段作爲用作自連接外鍵的鍵。我不希望ldapId成爲我的表的主鍵。這就是爲什麼我總結提到我需要一些方法來使用除主鍵以外的字段來實現hasMany關係。我認爲有一個選擇是將Grails與hbm.xml映射文件結合使用,並將其映射爲java中的映射文件。任何其他? – maverick13

+0

我知道很古老的問題,但你有沒有找到更好的解決方案?我正面臨着這個問題,我是新來的Grails ...... – ETL