一直在努力寻找一个好几个小时的答案,但到目前为止还没有设法提出一个适当的解决方案,所以我希望这里有人可能会有更多的Grails经验,并在其中实现自定义关系。Grails - 如何实现不使用id列的外键关系?
我的问题是,我有两个类:
公司
OrderConfig
OrderConfig,包含两个公司。 1为收货人,1为托运人。我实现了这种关系(见下文),并且一切都看起来很漂亮,我的order_config表包含一个consignee_company_id列和一个shipper_company_id列。
但是,我根本不需要或者完全不需要company_id列。我宁愿使用CompanyName作为标识列。我怎样才能防止Grails自动添加id列到公司表中,而是使用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
}
嗨,谢谢你。这解决了问题的一部分,因为生成的Order表现在包含对varchar列的引用,并且公司表具有Company_Name列作为主键。但是,Order中的关系列仍标记为consignee_id和shipper_id。当我尝试编译时,它会起作用,但当尝试添加新的命令时,该应用程序会抛出一个错误:无法在空对象上调用方法isInstance()。任何想法如何解决这个问题?我一直在尝试各种解决方案,但目前为止还没有成功。 – Peter 2011-01-10 09:30:51