2010-10-26 31 views
1

這已被竊聽我,Grails的單向一個一對多

可以說,我有兩個型號,類別和產品

class Category { 
    static hasMany = [products : Product] 
    String name 
} 
.. 
class Product { 
    String name 
} 
現在

,我想刪除產品,這發生在存在很多類別。我在產品現在想出了這些線路beforeDelete方法

def beforeDelete = { 
    Category.list()?.each{ 
     it.removeFromProducts(this) 
    } 
} 

這可能工作,但我看到它的方式,這是一個很多查詢的一個簡單的任務。我知道我可以用一行sql字符串(「從category_product where product_id =?」中刪除)獲得相同的結果。但我只是好奇,是否有更復雜的方式在Grails中實現這一點? (除執行SQL字符串)

回答

1

你可以將下列行添加到Category類

static mapping = { 
    products cascade: "all-delete-orphan" 
} 

,並呼籲刪除類別。爲什麼你在這種情況下使用單向關係?雙向的會更好嗎?在上面的例子中,您每次刪除一個資源繁重的操作(取決於您當然有很多類別)的產品時,您會遍歷所有類別,更好的解決方案是通過像這樣的雙向關係來查找類別:

class Product { 
    String name 
    static belongsTo = [category: Category] 
} 

這就是你可以很容易地從產品類別中刪除它。

有關更多提示和技巧,請參閱this blog post