Search code examples
grailsgrails-orm

Grails GORM domain class relation for saving


below is the domain class structured

class User {
   String username
   String password
   String emailAddress
   static hasMany = [memberships: Membership]
}

class Membership {
   String name
   Integer memberPlanId
   static belongsTo = [user: User]
}

//MemberPlan data have 2 types of plan existed in DB
class MemberPlan {
   String type
   Float amount
}

I want the 'memberPlanId' of Membership to reference from MemberPlan. How do I set from there, it should be under belongsTo? And how does the saving query for this 'memberPlanId' property goes?

new User(username: 'input_username', password: 'input_password', emailAddress: 'input_emailAddress')
  .addToMemberShips(new Membership(name: 'input_name', memberPlanId: ?))
  .save()

Solution

  • You would want to edit the Membership domain as follows

    class Membership {
       String name
       MemberPLan memberPlan                 // this is basically a belongsTo relation
       static belongsTo = [user: User]
    }
    

    To save a new user you can use

    new User(username: 'input_username', password: 'input_password', emailAddress: 'input_emailAddress')
      .addToMemberShips(new Membership(name: 'input_name', memberPlan: MemberPlan.get(1)))
      .save()
    

    MemberPlan.get(1) will fetch the record from the database with id = 1

    Hope that helps