Question

I've searched on google and mostly of examples didn't helped or I'm doing wrong what I want. So I quite don't understand how GORM saves in this type of relationship, how I can save new event that is related on the user? the addToEvent doesn't work.

class User{
Long id
String name
Long codeUser
StatusType statusType
static hasMany = [event: Event]
static constraints = {
    statusType(nullable: true)
    name(nullable: true)
}
class Event{
Long id
String name
String startDate
String description
static belongsTo = [user:User]
static constraints = {
    name(nullable: true)
    startDate(nullable: true)
    description(nullable: true)
}

def createEvent(){
    def data = JSON.parse(params.data)
    def user = User.findByCodeUser(data.codeUser)
    def event = new Event(name: data.name, startDate: data.start_time, description: data.description)
    //removed the user: user
    user.addToEvent(event)
    user.save(flush: true)
}

The error is this: Message: No signature of method: java.util.ArrayList.addToEvent() is applicable for argument types: (project.web.Event) values: [project.web.Event : (unsaved)]

Was it helpful?

Solution

As outlined in the Grails documentation you need to use the addTo* method to save the relationship correctly through GORM.

class User{
    ...//attributes
    Long codeUser
    static hasMany = [event: Event]
}
class Event{
    ...//attributes
    Long codeEvent
    static belongsTo = [user:User]
}

def user = User.findByCodeUser(params.codeUser)

def event = new Event(codeEvent: params.codeEvent)
user.addToEvent(event)
user.save(flush: true)

Notice that you don't have to set the User property of the Event and saving the User will also save the Event.

Finally, as a style guide you typically want to name your collections in the plural form.

static hasMany = [events: Event]
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top