【问题标题】:How to change name of the foreign key used to map an association in Grails如何更改用于在 Grails 中映射关联的外键名称
【发布时间】: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


    【解决方案1】:

    我认为这样的事情可能有用:

    class AreaServer {
        static hasMany = [serverProtocol: ServerProtocol]
        static mappedBy = [serverProtocol: "server"]
    }
    
    class ServerProtocol {
        static mapping = { server column: 'server_serverId'  }
    
        AreaServer server
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      相关资源
      最近更新 更多