2014-12-13 54 views
1

如果你能幫助我解決問題,或者告訴我更好的方法,我將不勝感激。 所以基本上我有3種型號,如何在Grails中有兩個或多個對象共享一個對象時設置數據庫模式?

Class Person { 
     String firstName 
     String lastName 
     ... 
     Address personalAdd 
} 

Class Business { 
     String businessName 
     String BusinessType 
     .... 
     Address BusinessAdd 
} 

現在這2款機型都共享一個通用模型,

Class Address { 
     String Street 
     String zip 
     ... 
} 

現在,當我保存企業或個人,但它仍然表明Address.list()。 size()== 0在單元測試中。 當我明確地保存對象,

address.save(flush: true) 
new Business(... ... ..., address: address).save(flush:true) 

它工作正常, 但後來當我刪除它不會刪除任何。我想級聯「全刪除,孤兒」和「刪除」,沒有工作,我也試過,

Class Business { 

     .... 
     def beforeDelete() { 
      Address.withNewSession { 
      Address.load(address.id).delete() 
     } 
     } 
    ..... 
} 

但還是沒有預期的輸出! 我該怎麼辦?解決這個問題?

回答

1

您的房產沒有任何hasManybelongsTo關係鏈接,因此獨立處理。無論如何你都不能在地址上設置belongsTo(它有不同的父母)。那麼你有什麼選擇?

您可以將實體分開(因爲您現在擁有它們)並手動處理關係(GORM events可以幫助您)。

您可以將embedAddress納入PersonBusiness類。如果你需要將地址放在自己的表中,那就行不通了。

或者你也可以繼承Address並有例如:

class BusinessAddress extends Address { 
    static belongsTo = [ business: Business ] 
} 

..和

class PersonAddress extends Address { 
    static belongsTo = [ person: Person ] 
} 

這樣,你就必須與數據庫中的地址,只有一個表。

+0

謝謝!我很感激! – 2014-12-13 15:54:33

相關問題