2011-11-03 63 views
4

我正在嘗試使用Grails啓動並運行項目。 我有2個表,areaserver和serverprotocol。 areaserver與serverprotocol具有一對多的關係(對許多服務器協議來說一個服務器)。 實體類AreaServer具有分配的字符串主鍵。 我已經手動配置AreaServer的ID密鑰爲一個分配的字符串, ,我已經將ServerProtocol類配置爲AreaServer的多對一關係中的許多,但是當我嘗試在AreaServer的手動設置外鍵「映射」部分,Grails使用傳統的方法,即它假定AreaServer的外鍵是自動遞增的ID與值「ID」如何更改用於在Grails中映射關聯的外鍵名稱

我的繼承人AreaServer實體類:

class AreaServer { 


String serverId 
... 
... 
static hasMany = [ serverProtocol : ServerProtocol ] 

static mapping = {   
     serverProtocol lazy:false   
     id name: 'serverId', generator: 'assigned' 
     serverProtocol column: 'server_serverId'    
} 

}

這裏是我的ServerProtocol實體類:

class ServerProtocol { 

long dbId 
.... 
.... 
static belongsTo = [ areaServer : AreaServer ] 

static mapping = { 

    id name: 'dbId' 
    version false 
} 

}

當Grails的創建數據庫和表格「serverprotocol」表中有一個名爲「areaServer_id」而不是「server_serverId」,我將其配置在AreaServer的映射部分做一個外鍵。 像我試圖做的那樣配置外鍵應該是一個標準過程,如在Grails.org文檔http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html 的「表和名稱列」中所示出於某種原因更改外鍵名稱(當外鍵嵌套時在一對多關係的「許多」表中)只是不起作用,文檔說它應該。

我知道Grails標準約定是希望每個表都有一個名爲「id」的自動遞增主鍵,這就是爲什麼外鍵被命名爲「areaServer_id」(因爲AreaServer在ServerProtocol中被引用爲areaServer )。 有誰知道爲什麼Grails不允許我手動修改外鍵的名字,就像在Grails的文檔中說的那樣?

感謝您提前給予任何幫助!

回答

0

像這樣的東西可以工作,我認爲:

class AreaServer { 
    static hasMany = [serverProtocol: ServerProtocol] 
    static mappedBy = [serverProtocol: "server"] 
} 

class ServerProtocol { 
    static mapping = { server column: 'server_serverId' } 

    AreaServer server 
}