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

grails-没有方法save()的签名,grails,gorm,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) } 这段代码在开发中运行得很好,但当我在生产中执行代码时,我遇

我使用的是grails 2.1.1,当我试图在生产环境中保存一个对象时,我得到一条消息“没有方法的签名:ClassA.save()适用于参数类型:()值:[]”

代码如下:

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

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

有几件事需要注意

你说它可以在开发环境中工作,但不能在生产环境中工作,所以任何调查的第一个出发点就是两者之间的区别。意思是在两种产品/开发环境上都执行
显示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是try的最后一个选择,但是if-it-save-println错误是下一个尝试

最后,有很多方法可以保存一个类,以防Anton建议在保存时ClassA中有其他内置函数,
new ClassA()
可能会导致问题,可能是因为缺少了

ClassA() {
  super()
}
或者我最后会试着做个测试

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

相同的逻辑应用不同

需要注意的几件事

你说它可以在开发环境中工作,但不能在生产环境中工作,所以任何调查的第一个出发点就是两者之间的区别。意思是在两种产品/开发环境上都执行
显示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是try的最后一个选择,但是if-it-save-println错误是下一个尝试

最后,有很多方法可以保存一个类,以防Anton建议在保存时ClassA中有其他内置函数,
new ClassA()
可能会导致问题,可能是因为缺少了

ClassA() {
  super()
}
或者我最后会试着做个测试

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

相同的逻辑应用不同

您确定应用程序中的ClassA save()方法没有应用元魔术吗?谢谢Anton,我可以解决这个问题。。。classA没有任何元魔法。。。我更改了域名和表名,现在可以使用了。我不知道为什么…一切正常很好,但让我问一下“和桌子名”是什么意思?我希望您没有手动创建表?因为grails自动为您创建了它们:)您确定应用程序中的某个地方没有对ClassA save()方法应用元魔术吗?谢谢Anton,我可以解决这个问题。。。classA没有任何元魔法。。。我更改了域名和表名,现在可以使用了。我不知道为什么…一切正常很好,但让我问一下“和桌子名”是什么意思?我希望您没有手动创建表?因为grails是自动为您创建它们的:)嗨,瓦希德,感谢您的回答,我尝试使用“showcreatetable”,但并没有看到两个表之间的差异。我也试着像你说的那样改变逻辑,但问题仍然存在。这可能会给你一个线索。我建议你从头到脚重新写一遍。此外,如果保存try-catch和println-suggestive时出现问题,则应该会给您更多错误,以便在与保存相关的情况下提供更多线索-开始认为这是其他地方发生的事情,可能是savethanky-vahid的一部分,问题是grails没有识别域(我尝试使用其他grails域方法,但没有)我更改了域名和表名,现在一切正常。我不知道真正的问题是什么。(对不起,我的英语)嗨,瓦希德,谢谢你的回答,我尝试使用“显示创建表”我没有看到这两个表之间的差异。我也试着像你说的那样更改逻辑,但问题仍然存在。这可能会给你一个线索。我建议你从头到脚重新编写它。另外,如果保存try catch和println建议时出现问题,应该会给你更多的错误,以便在保存时提供更多线索兴高采烈-开始认为这是其他地方发生的事情,可能是因为savevahid的一部分,问题是grails无法识别域(我尝试使用其他grails域方法,但没有),我更改了域和表名,现在一切正常。我不知道真正的问题是什么。(对不起我的英语)