grails - 没有方法签名:save()

时间:2017-02-20 17:28:03

标签: grails gorm

我使用grails 2.1.1并获取消息"没有方法签名:ClassA.save()适用于参数类型:()值:[]"尝试在生产环境中保存对象时。

这是代码:

def method(campId, userId){
    ClassA cbl = new ClassA()
    cbl.userId = userId
    cbl.campId = campId
    cbl.save(flush:true)
}

这段代码在开发中运行良好,但是当我在生产中执行代码时,我遇到了这个问题。

1 个答案:

答案 0 :(得分:0)

要注意的几件事

你说它适用于开发但不适用于生产,因此任何调查的第一个起点是两者之间的区别。意思是在两个产品/开发环境中都做show create table class_a

它可能已经发生了变化,它有一些不再提供的必需值

第2步:

显然没有保存,所以你需要查看是否有任何错误被抛出

def method(campId, userId){
    if (campId && userId) {
    try {
    ClassA cbl = new ClassA()
    cbl.userId = userId
    cbl.campId = campId
    if (!cbl.save(flush:true)) {
      //println cbl.errors
      //log.info "${cbl.errors}"
    }
    }catch (Exception e) {
      //println "E really happended $e"
    }
   }else {
     println "oh my ... a certain value has not been provided"
   }
}

你在上面的代码中看到一个if语句,以确保提供两个值,因为你设置时没有检查,try catch是最后替代尝试但是如果它保存println错误是接下来要尝试的事情

最后,有很多方法可以保存一个类,以防安东建议你在保存时在ClassA中有一些其他的内置函数,new ClassA()可能会导致问题,因为你错过了

ClassA() {
  super()
}

或者其他什么我最后会尝试这个作为测试

  ClassA cbl = new ClassA(userId:userId,campId:campId)?.save(flush:true)

相同的逻辑应用不同