【发布时间】:2011-11-03 22:50:42
【问题描述】:
我正在尝试使用 Grails 启动并运行一个项目。 我有 2 个表,areaserver 和 serverprotocol。 areaserver 与 serverprotocol 具有一对多的关系(一个 areaserver 到多个 serverprotocols)。 实体类 AreaServer 具有分配的字符串主键。 我已经手动将 AreaServer 的 id 键配置为分配的字符串, 我已经将 ServerProtocol 类配置为 AreaServer 的多对一关系中的 many,但是当我尝试在 AreaServer 的“映射”部分手动设置外键时,Grails 使用常规方法,它假设 AreaServer 的外键是具有值“id”的自动递增 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”的外键,而不是我在 AreaServer 的映射部分配置的“server_serverId”。 像我试图做的那样配置外键应该是一个标准过程,如 Grails.org 文档http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html 中的“表和名称列”下所示 由于某种原因,更改外键名称(当外键嵌套在一对多关系的“多”表中时)不起作用,文档说它应该这样做。
我知道 Grails 标准约定是期望每个表都有一个名为“id”的自动递增主键,这就是为什么将外键命名为“areaServer_id”(因为在 ServerProtocol 中 AreaServer 被称为 areaServer) . 有谁知道为什么 Grails 不允许我像 Grails 文档中所说的那样手动修改外键的名称?
提前感谢您的帮助!
【问题讨论】:
标签: grails grails-orm