【发布时间】:2023-03-09 05:51:01
【问题描述】:
我想在删除域时删除所有 hasMany 域和关联域。我有以下域结构。
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 ]
}
我想删除所有 options、bookOptions 并删除 Book 和 BookOption 之间的关联strong>类别已删除。
目前使用 options cascade: "all-delete-orphan",当一个 Category 被删除时,所有 options 都会被删除,但是我遇到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有很多Options。一些Options 来自Categorys,其他来自BookOptions。所以也许Category和BookOption可以是Option的特殊形式(又名。一个子类)。
标签: grails grails-orm