域多重继承和manyToMany关系removeFrom不起作用

时间:2014-01-23 14:43:49

标签: grails gorm

由于内容管理总线,我准备了一些复杂的模型结构。

我的主要内容模型如下面的代码。

    class CmsContent implements Comparable<CmsContent>, Taggable, Serializable {
          Set<CmsContent> contents
          static hasMany = [contents:CmsContent]
    }

其他内容模型从上面扩展

   class Menu extends CmsContent {
   }

   class Image extends CmsContent {
   }

   class Video extends CmsContent {       
   }

在控制器端,当将图像添加到菜单时,它完全正常工作

def addContent(){

        Menu menuInstance = Menu.get(params.id)
        if (menuInstance == null) {
            notFound()
            return
        }

        CmsContent content = CmsContent.get(params.contentId)
        if (content == null) {
            notFound()
            return
        }

        menuInstance.addToContents(content)
        menuInstance.save(flush: true)

        request.withFormat {

            '*'{
                def result =[:]  ;
                result.status ='success';
                render result as JSON
            }
        }
    }


def removeContent(){

    Menu menuInstance = Menu.get(params.id)
    if (menuInstance == null) {
        notFound()
        return
    }

    long id = Long.valueOf(params.contentId)
    CmsContent content = cmsContent.contents.find { it.id == id }
    if (content == null) {
        notFound()
        return
    }

    menuInstance.removeFromContents(content)
    menuInstance.save(flush: true)

    request.withFormat {
        '*'{
            def result =[:]  ;
            result.status ='success';
            render result as JSON
        }
    }

}

但是当我尝试删除面临的异常时。

Cannot get property 'name' on null object. Stacktrace follows:
Message: Cannot get property 'name' on null object

我在 DomainClassGrailsPlugin 中的grails代码中进行了跟踪。 我意识到addTo方法和第368行检查 prop.otherSide 属性

if (prop.bidirectional && prop.otherSide) {
}

遗憾的是removeTo方法没有检查 prop.otherSide 属性,因此名称字段抛出异常。

if (prop.bidirectional) {
   if (prop.manyToMany) {
        String name = prop.otherSide.name
        arg[name]?.remove(delegate)
   } else {
        arg[prop.otherSide.name] = null
   }
}
你怎么看?你同意我的意见吗?

0 个答案:

没有答案