几个小时以来一直试图寻找答案,但到目前为止还没有想出一个合适的解决方案,所以我希望这里的人可能对 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/