我使用grails 2.1.1并获取消息"没有方法签名:ClassA.save()适用于参数类型:()值:[]"尝试在生产环境中保存对象时。
这是代码:
def method(campId, userId){
ClassA cbl = new ClassA()
cbl.userId = userId
cbl.campId = campId
cbl.save(flush:true)
}
这段代码在开发中运行良好,但是当我在生产中执行代码时,我遇到了这个问题。
答案 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)
相同的逻辑应用不同