2011-11-30 196 views
0

可以說我在我的Grails應用程序中有一個名爲Tag的域類。Grails中的領域建模如何受領域屬性影響?

class Tag { 
    String name // line number 1 
    User user // Line number 2 
     static constraints = { 
     } 
    static belongsTo = [User, Post] 
} 

我創建與belongsTo關鍵字的幫助UserTag之間的關係。但我對line number 2有疑問,這是User user。現在將此代碼放置在我的Tag類中會以任何方式影響TagUser之間的關係,或者只關係belongsTo關鍵字中提供的內容。

還有什麼工具可以可視化 Grails應用程序中任何類之間的關係?

回答

3

belongsTo與幾個類通常是可疑的,因爲它意味着實例將與其他幾個域對象構成關係。根據我的經驗,只有當你知道其中一個設置爲null時,它纔有用(但仍然可以改爲TagUserTagPost來代替Tag類)。我建議你刪除belongsTo(可能是Post)之一。

在您的PostUser類中,您可能有hasMany關係。這足以創建關係,並且不需要必須Tag中加上belongsTo。使用belongsTo的唯一優點是更新或刪除UserPost將級聯並保存Tags

如果您的標記用例是傳統標記(例如,stackoverflow上的標記),則嘗試創建多對多關係(一個用戶具有多個標記,一個標記具有多個用戶。您可以在多對多關係中使用belongsTo來指示哪個擁有的關係。閱讀the documentation on many-to-many以瞭解這種關係是如何工作的。

關於你最後的問題,IntelliJ有一個集成的域類依賴關係可視化功能。

+0

所以你的意思是要儘可能地去除'belongsTo'? –

+1

不可以。如果你有一對多關係或一對一關係,並且對象之間具有很強的依賴關係(例如,*刪除用戶應該刪除它的標記*),那麼你應該**使用'belongsTo'。看看[GORM gotcha](http://blog.springsource.org/2010/07/02/gorm-gotchas-part-2/)瞭解'belongsTo'的含義和含義。 – Antoine

+0

感謝您的鏈接和答案:) –