这一直困扰着我,
假设我有两个型号,类别和产品
class Category {
static hasMany = [products : Product]
String name
}
..
class Product {
String name
}
现在,我想删除碰巧存在于许多类别中的产品。我在删除方法之前在我的产品中提出了这些行
def beforeDelete = {
Category.list()?.each{
it.removeFromProducts(this)
}
}
现在这可能有效,但我看到它的方式,这是一个简单任务的大量查询。我知道只用一行sql字符串就可以获得相同的结果(“从category_product中删除product_id =?”)。但我只是好奇,是否有更复杂的方式来实现这一目标? (除了执行sql字符串)
答案 0 :(得分:1)
您可以将以下行添加到Category类
static mapping = {
products cascade: "all-delete-orphan"
}
并在类别上调用delete。在这种情况下,为什么使用单向关系?用双向的不是更好吗?在上面的例子中,每次删除一个资源繁重的产品时,你都会遍历所有类别(当然,这取决于你的许多类别),更好的解决方案是通过像这样的双向关系找到类别。 :
class Product {
String name
static belongsTo = [category: Category]
}
那就是你可以轻松地从产品中获取类别并将其删除。
有关更多提示和提示,请参阅this blog post。