Grails 从hasMany关联中删除元素无效

Grails 从hasMany关联中删除元素无效,grails,gorm,Grails,Gorm,调用ArrayList#remove()或ArrayList#removeAll()无效。为什么会这样 class Category { static hasMany = [elems: Elem] // .. } class Elem { static belongsTo = Category // .. } // ExampleController.groovy def saveCategory(/* args */) { def category

调用
ArrayList#remove()
ArrayList#removeAll()
无效。为什么会这样

class Category {
    static hasMany = [elems: Elem]
    // ..
}

class Elem {
    static belongsTo = Category
    // ..
}

// ExampleController.groovy
def saveCategory(/* args */) {
    def category = categoryService.get.. // get some category object
    def elem = elemService.getElem(1)    // get some element that's in the category
    category.elems.remove(elem)  // *How to get this working*? Returns false as the object is not getting removed.
    category = categoryService.saveCategory(category)
    JSON.registerObjectMarshaller(Category) {
        def map = [:]
        map['id'] = it.id
        map['elems'] = it.elems
        return map
    }
    JSON.registerObjectMarshaller(Elem) {
        def map = [:]
        map['id'] = it.id
        return map
    }
    render(['category': category] as JSON)
}

谢谢。

处理此问题的官方方法是使用
addTo*
removeFrom*
方法。你可能想看看他们是怎么处理的


之后是否保存
类别
实例

category.elems.remove(elem)
category.save()

你想试试这是打字错误吗<代码>类别vs
患者类别
?可能是第三个类,但仍然很混乱。@cfrick纠正了它。谢谢,没有效果。获取集合的副本并对其进行迭代,然后以老式方式将其删除,然后将其分配回
类别
对象似乎有效。只是保存:在调用
category.save()
后,调用
save
方法。我希望文档中提到的
removeFromElems
能够正常工作,但这可能是一些奇怪的异常现象。也请站在保存端:如何确定删除了elem?另外,我还想告诉你,带有未知元素的
removeFrom*
可能会默默地忽略你的愿望。在代码示例中添加了它。元素是已知的,id实际上是作为参数从客户端发送到func的。当然,通过调用执行
category.save(flush:true)
的服务方法。是否确实从集合中删除
elem
?在删除前后打印
元素