Grails removeFrom*方法应该从数据库中删除子项,还是只删除父子关系?
问题在主题中 目前,我观察到的行为是,当我调用Grails removeFrom*方法应该从数据库中删除子项,还是只删除父子关系?,grails,gorm,Grails,Gorm,问题在主题中 目前,我观察到的行为是,当我调用Parent.removeFromChilds(child)时,child不会从我的数据库中删除(即,我可以通过child.findBy…(args))找到它) 我很好奇这是否是正确的行为。如果是-在一个事务中删除关系和子项的最佳方法是什么 如果否-我会做错什么?默认情况下,如果删除一对多的拥有方,则删除级联。如果只删除子项,它将不会删除。您可以通过在关系的拥有方指定“all delete Orphant”的自定义级联行为来更改这一点。从Grails
Parent.removeFromChilds(child)
时,child不会从我的数据库中删除(即,我可以通过child.findBy…(args)
)找到它)
我很好奇这是否是正确的行为。如果是-在一个事务中删除关系和子项的最佳方法是什么
如果否-我会做错什么?默认情况下,如果删除一对多的拥有方,则删除级联。如果只删除子项,它将不会删除。您可以通过在关系的拥有方指定“all delete Orphant”的自定义级联行为来更改这一点。从Grails文档:
class Person {
String firstName
static hasMany = [addresses: Address]
static mapping = { addresses cascade: "all-delete-orphan" } }
更新
对不太明显的
addTo
和removeFrom
行为进行了很好的细分。我认为它包含了您要查找的确切信息。我认为这不是真的。当我执行类似的parent.removeFromChildren(child)和parent.save(flush:true)操作时,子对象将从集合中删除并从数据库中删除(假设没有错误)。@Gregg:我的操作与此完全相同。没有错误。我唯一能想到的是验证行为的方法:当我对父级进行单元测试时,它会按照描述的那样工作(而且我还从来没有用真正的DB进行过测试)。