Wednesday, April 6, 2011

How to resolve having 2 belongsTo in a single domain

I have the following domains: User, Role, Company. User and Role has m:n relationship, Company to User has 1:m, and User to Company is 1:1. I'm having problem with the definition of User domain. Here it is:

class User {
 static hasMany = [authorities: Role ]
 static belongsTo = [ Role , Company ]
}

I would like to access the company from a User so that user.company will give me the company where he is assigned. This modification is not allowed:

static belongsTo = [ Role , company: Company ]

Here's the error:

Unexpected node type: EXPR found when expecting type: LABELED_ARG at line: 9 column: 41. File: /Users/alfred/Applications/grails_projects/extramile/grails-app/domain/fbm/extramile/User.groovy @ line 9, column 41.

Note that it is not an option to also do this:

static belongsTo = [ role: Role , company: Company ]

Since User-Role has m:n (also specified by the 'authorities' variable already).

Any other workaround? Thanks.

From stackoverflow
  • If I understand you correctly, this should work:

    class User {
        static hasMany = [authorities: Role ]
        static belongsTo = [ Role , Company ]
        Company company
    }
    

    I can't help thinking that it's odd that your User belongs to a Company and not the other way around, i.e. deleting a Company deletes all Users in that company. Anyway, I don't know your domain so I'll shut up!

    firnnauriel : yes, this is what i did after posting my question and it did work as what i've planned. i'm supposed to answer my own question again but forgot to do it yesterday :p but still, thanks for the time :)
    firnnauriel : btw, regarding your concern about the domain, is that how 'belongsTo' work? i added that because i would like to expose the dynamic methods (addTo* and removeFrom*).
    Dave : You only need addTo and removeFrom for collections so that GORM will take care of the setting of refs and cascading. The Grails docs give a fuller explanation of the consequences of using belongsTo.

0 comments:

Post a Comment