Grails - 如何实现不使用 id 列的外键关系?

标签 grails

几个小时以来一直试图寻找答案,但到目前为止还没有想出一个合适的解决方案,所以我希望这里的人可能对 Grails 有更多的经验,并在其中实现自定义关系。

我的问题是我有两个类(class):

公司
订单配置

OrderConfig 包含对 Company 的两个引用。收货人 1 个,托运人 1 个。我实现了关系(见下文),一切看起来都很花哨,我的 order_config 表同时包含 consignee_company_id 列和shipper_company_id 列。

但是,我根本不需要或不需要 company_id 列。我更喜欢使用 CompanyName 作为标识列。如何防止 Grails 自动将 id 列添加到 company 表中,而是使用 companyName 列作为主键,从而确保生成的 order_config 表包含 companyName 而不是 company_id?

我尝试将公司嵌入到 orderconfig 类中,并与包括映射在内的各种其他选项作斗争,但是我遇到了每一个问题。

提前致谢!

到目前为止我的代码:

class OrderConfig {
 static hasMany = [consignee:Company, shipper:Company]

  String toString() {
    return "${consignee}"
 }

    static constraints = {
      consignee (blank:false, maxSize:10)
      shipper (blank:false, maxSize:10)
  }

  Company consignee
  Company shipper
}




class Company {
    String toString() {
    return "${companyName}"
 }

static constraints = {
    companyName(blank:false, maxSize:10)
    companyAddress1(blank:false, maxSize:40)
    companyAddress2(blank:false, maxSize:40)
    companyAddress3(blank:false, maxSize:40)
    companyAddress4(blank:false, maxSize:40)
    companyZipCode(blank:false, maxSize:36)
    companyCountry(blank:false, maxSize:36)
}

  String companyName
  String companyAddress1
  String companyAddress2
  String companyAddress3
  String companyAddress4
  String companyZipCode
  String companyCountry
}

最佳答案

您需要查看文档中的高级 GORM 配置选项,在第 5.5.2.1 节中

有一个例子

class Person {
  String firstName
  static hasMany = [addresses:Address]
  static mapping = {
      table 'people'
      firstName column:'First_Name'
      addresses joinTable:[name:'Person_Addresses', key:'Person_Id', column:'Address_Id']
  }
}

在那里您可以看到他们如何指定要执行这些操作的键和列名。

编辑——我重读了你的问题:如果你问如何改变它以便公司有一个分配的 id,你也许可以做类似这个例子的事情
static mapping = {
    id generator:'assigned', column:'column_name',name:'propertyName'
}

此处提供更多选项:http://www.grails.org/doc/1.3.x/ref/Database%20Mapping/id.html

关于Grails - 如何实现不使用 id 列的外键关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4616865/

相关文章:

grails - Grails 中的 Controller 默认是事务性的吗?

javascript - Grails:选择另一个下拉列表时填充下拉列表

eclipse - GGTS 3.6.2和Grails 2.4.4 Run-App和Test-App无法使用

grails - Grails到 Controller View 文件夹的相对路径

grails - 不计算 Spock 集成测试交互

tomcat - Grails-cxf 中通过 SSL 的 Web 服务?

grails - 如何在Grails中为select(组合框)使用和创建标签库

hibernate - 将 Postgresql 与 Grails 一起使用 : Missing sequence or table: hibernate_sequence

java - 在 Grails 中运行 Java 程序

grails - 如何在Grails Gorm中查询3个表