Как изменить имя внешнего ключа, используемого для сопоставления ассоциации в Grails - PullRequest
4 голосов
/ 04 ноября 2011

Я пытаюсь запустить проект с использованием Grails.У меня есть 2 таблицы, areaserver и serverprotocol.areaserver имеет отношение один-ко-многим с протоколом сервера (один сервер-ко многим протоколам сервера).Класс сущности AreaServer имеет назначенный строковый первичный ключ.Я вручную настроил ключ идентификатора AreaServer, чтобы он был назначенной строкой, и я настроил класс ServerProtocol как множество в соотношении «многие к одному» в AreaServer, но когда я пытаюсь установить внешний ключ вручную в отображении «AreaServer» вручную"В Grails используется традиционный подход, в котором предполагается, что внешний ключ AreaServer представляет собой автоматически увеличивающийся идентификатор со значением" id "

Вот мой класс сущностей 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 упоминается как areaServer в ServerProtocol).Кто-нибудь знает, почему Grails не позволяет мне изменять имя внешнего ключа вручную, как это возможно в документации Grails?

Заранее благодарен за любую помощь!

1 Ответ

0 голосов
/ 20 апреля 2012

Как-то так может работать, я думаю:

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

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

    AreaServer server
}
...