Emiliano
Emiliano

Reputation: 11

grails - No signature of method: save()

I'm using grails 2.1.1 and I getting the message "No signature of method: ClassA.save() is applicable for argument types: () values: []" when trying to save an object in production environment.

This is the code:

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

This code works fine in development but when I execute the code in production I have this problem.

Upvotes: 1

Views: 220

Answers (1)

V H
V H

Reputation: 8587

A couple of things to look out for

You say it works in dev but not in production so the first starting point of any investigation is what is the difference between both. Meaning do a show create table class_a on both product/development environments.

It maybe something has changed and it has some required value that is no longer provided

Step 2:

It is obviously not saving so you need to see if any errors are thrown

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"
   }
}

You see in above code an if statement to ensure both values provided since you are setting without checking, the try catch was last alternative to try but the if it saves println error is the next thing to try

Finally there are many ways to save a class just in case as Anton suggest you have some other inbuild functions in ClassA when it comes to saving and new ClassA() may cause an issue maybe since you are missing

ClassA() {
  super()
}

or something then I would lastly try this as a test

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

Same logic applied differently

Upvotes: 0

Related Questions