我想,無論何時域名被刪除,全部刪除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'(也就是一個子類)的特殊形式。 –