cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Gentry <mgen...@masslight.net>
Subject Re: querying vs using relationship list and iterate
Date Tue, 08 Jun 2010 14:55:23 GMT
#2 won't work the way you want.  It would need to be more along the lines of:

user = $testUser and user.memberships.group = $group


I've tended to use something closer to #1, but encapsulate it in my
User.java class as something like:

public boolean isInGroup(String groupName)
{
    for (Group g : getMemberships().getGroups())
        if (groupName.equals(g.getName())
            return true;
    return false;
}

That's pseudocode and unlikely to work, but should give you the
general idea.  You can then say:

if (myUser.isInGroup(testGroupName)) {...}


Thanks,

mrg


On Tue, Jun 8, 2010 at 10:41 AM, Nishant Neeraj
<nishant.has.a.question@gmail.com> wrote:
> Hi,
>
> I have three tables USERS, MEMBERSHIPS, GROUPS -- where membership is a
> linking table that joins users and groups in many-to-many relationship, and
> also stores users' role in the group.
>
> Sometime when I need to know whether a user exists in a group [or what role
> a user has in a group], I can do it by two ways:
>
> 1. groups.getMembershipList() and iterate over the list inflating each
> member and comparing with the User object that is on test. like
>
> for(Membership m: g.getMembershipList())
> {
>   if(m.getUser().equals(testUser)
>       return true;
> }
>
> Or.
>
> 2. I can just write a query using Expression.
>
> Expression.forString(Membership.class, "user = $testUser and group=$group");
>
>
> Can someone suggest which one is better approach? Or, is there a even better
> third approach?
>
> Thanks
> Nishant
>

Mime
View raw message