我想,无论何时域名被删除,全部删除hasMany域名和相关域名。我有以下域名结构。Grails:当主域对象被删除时,如何删除关联的域?
class Book {
static hasMany = [ bookOptions: BookOption ]
}
class Category {
static hasMany = [ options: Option ]
static mapping = {
options cascade: "all-delete-orphan"
}
}
class Option {
static belongsTo = [ category: Category ]
}
BookOption {
Option option
static belongsTo = [ book: Book, category: Category ]
}
我想删除所有选项,bookOptions和书和BookOption每当类别被删除之间移除关联。
与 选项级联目前:“全删除,孤儿”,所有选项被删除时,类别被删除,但是我遇到一个参照完整性约束违反BookOption。
一个选项是手动查找所有bookOptions,遍历列表并删除每个列表。
def bookOptions = BookOption.findAllByCategory(category)
bookOptions.each{ bookOption ->
def book = bookOption.book
book.removeFromBookOptions(bookOption)
bookOption.delete(flush:true)
}
category.delete(flush:true)
是否还有更多的Grails方式来执行此操作?或者是我定义标准的选项?
有没有办法可以修改领域模型,以便关联创建一个线性的依赖关系列表,而不是您目前拥有的循环依赖关系?这对于解决这个问题将会有很长的路要走,简化单元测试等等。从我收集的内容来看,基本上'Book'有很多'Option's。一些'选项'来自'类别',另一些来自'BookOption's。所以也许'Category'和'BookOption'可以是'Option'(也就是一个子类)的特殊形式。 –