Re: querying vs using relationship list and iterate

From: Nishant Neeraj (nishant.has.a.questio..mail.com)
Date: Tue Jun 08 2010 - 15:44:17 UTC

  • Next message: Joe Baldwin: "Re: delete via jdbc"

    Ah, great. Thanks. Exactly, what I needed to know.

    On Tue, Jun 8, 2010 at 9:02 PM, Michael Gentry <mgentr..asslight.net>wrote:

    > Both require a trip to the DB.
    >
    > #1 requires a trip one time to the DB to fault the groups from the DB,
    > but then it'll be in memory.
    >
    > #2 requires a trip to the DB every time, so that could be slower in
    > the long run even though it returns fewer matches.
    >
    > If this is something that only happens once and you are REALLY
    > concerned about performance (and possibly have a LOT of groups), I'd
    > go with #2, otherwise #1. You can optimize #1 a bit, too, so you
    > don't have to iterate each time to check.
    >
    > mrg
    >
    >
    > On Tue, Jun 8, 2010 at 11:11 AM, Nishant Neeraj
    > <nishant.has.a.questio..mail.com> wrote:
    > > Thanks Michael for the quick response.
    > >
    > > I was wondering which one will be less costlier to do? A join query(#2),
    > or
    > > iterating over objects(#1)? And isn't iterating over objects need to pull
    > > each object from database before they can be compared?
    > >
    > > Thanks
    > > Nishant
    > >
    > > On Tue, Jun 8, 2010 at 8:25 PM, Michael Gentry <mgentr..asslight.net
    > >wrote:
    > >
    > >> #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.questio..mail.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
    > >> >
    > >>
    > >
    >



    This archive was generated by hypermail 2.0.0 : Tue Jun 08 2010 - 15:44:49 UTC