这一直困扰着我,

可以说我有两个型号,类别和产品

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字符串)

最佳答案

您可以将以下行添加到Category类

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

然后在类别上调用删除。在这种情况下,为什么要使用单向关系?双向的会不会更好?在上面的例子中,每次删除一个耗费资源的产品时,您都会遍历所有类别(当然,这取决于您拥有的许多类别),更好的解决方案是通过这样的双向关系来找到类别:
class Product {
    String name
    static belongsTo = [category: Category]
}

那就是您可以轻松地从Product转到Category并将其删除。

有关更多提示和技巧,请参见this blog post

关于hibernate - 单向一对多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4022512/

10-09 00:45