Re: double inner join

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Fri Oct 07 2005 - 13:55:50 EDT

  • Next message: Mike Kienenberger: "Re: unexpected new DataObject in DataContext"

    Don't have time to write a complete example, but here is an outline:

    1. Use DataContext.getEntityResolver() to get to the mapping in runtime.

    2. Create new ObjEntity based on the target entity in the
    relationship (i.e. based on Kitten). E.g.:

          ObjEntity kitten = entityResolver.lookupObjEntity("Kitten");

          ObjEntity clone = new ObjEntity("KittenHack");

          // we don't care what the class name is as long as there is no
    conflict
          clone.setClassName("java.lang.Object");
          clone.setDbEntityName(kitten.getDbEntityName());

             // copy attributes but not relationships...
             Iterator attributes = getDeclaredAttributes().iterator();
             while (attributes.hasNext()) {
                 ObjAttribute attribute = (ObjAttribute) attributes.next();

                 // just copy the name, type and DB Attribute mapping
             }

          // register with DataMap
          kitten.getDataMap().addObjEntity(clone);

    3. Create relationship from source entity (Cat) to the new entity
    (KittenHack) with a name different from original relationship (e.g.
    'kittenHacks').

    You should be good to go...

    Andrus

    On Oct 7, 2005, at 4:50 AM, Dave Merrin wrote:

    > that sounds like it might be possible. Is it possible to create a new
    > mapping based on an existing mapping on the fly (i.e. in code). How
    > do I
    > then go about using the new mapping to query the database?
    >
    > I've had a quick look through the ObjEntity class but I'm not sure
    > how to
    > run a query using it.
    >
    > Cheers,
    >
    > Dave
    >
    >
    >> -----Original Message-----
    >> From: Cris Daniluk [mailto:cris.danilu..mail.com]
    >> Sent: 06 October 2005 19:53
    >> To: cayenne-use..bjectstyle.org
    >> Subject: Re: double inner join
    >>
    >>
    >> I thought I saw a post a while back about someone doing this by
    >> creating another ObjEntity ref to the table or something like that?
    >>
    >> I could be smoking crack...
    >>
    >> Cris
    >>
    >> On 10/6/05, Andrus Adamchik <andru..bjectstyle.org> wrote:
    >>
    >>> There was a proposal to add that, but it has never materialized into
    >>> code (maybe someday)
    >>>
    >>> http://www.objectstyle.org/cayenne/lists/cayenne-devel/
    >>> 2003/09/0096.html
    >>>
    >>> So I guess for now SQLTemplate is the only way.
    >>>
    >>> Andrus
    >>>
    >>>
    >>> On Oct 6, 2005, at 12:47 PM, Dave Merrin wrote:
    >>>
    >>>
    >>>> i'd like to accomplish something like this using Expresssions:
    >>>>
    >>>> from Cat cat
    >>>> inner join cat.kittens as kittens0
    >>>> inner join cat.kittens as kittens1
    >>>> where kittens0.name = 'Fred'
    >>>> and kittens1.name = 'Amy'
    >>>>
    >>>> which would find cats that have at least two kittens, one named
    >>>> fred and
    >>>> another amy.
    >>>>
    >>>> How do I do this using Expressions?
    >>>>
    >>>> Cheers,
    >>>>
    >>>> Dave
    >>>>
    >>>>
    >>>>
    >>>
    >>>
    >>>
    >>
    >>
    >
    >
    >



    This archive was generated by hypermail 2.0.0 : Fri Oct 07 2005 - 13:55:51 EDT