一直在努力尋找一個好幾個小時的答案,但到目前爲止還沒有設法提出一個適當的解決方案,所以我希望這裏有人可能會有更多的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