Double inner joins (again)

From: Dave Merrin (dmerri..pasystems.co.uk)
Date: Tue Feb 14 2006 - 06:18:38 EST

  • Next message: Heiko.Erhard..i-de.com: "Re: unhappy with generated getTo methods"

    Hi,

    I've got some code which sets up new objects and relationships to allow me
    to do double inner joins. I've tried some code which goes a little further
    than originally planned to produce the following sql:

    SELECT DISTINCT
    t0.create_by, t0.create_timestamp, t0.instance, t0.item_id, t0.job_id,
    t0.name, t0.purge_flag, t0.update_by, t0.update_timestamp, t0.item_state_id,
    t0.item_type_id, t0.process_state_id
    FROM
            item t0,
            item_meta_data t1,
            meta_type t2,
            item_meta_data t3,
            meta_type t4
    WHERE
            t0.item_id = t1.item_id AND
            t1.meta_type_id = t2.meta_type_id AND
            t0.item_id = t3.item_id AND
            t1.meta_type_id = t4.meta_type_id AND

    ((t1.string_value = ?) AND (t2.name = ?) AND (t3.string_value = ?) AND
    (t4.name = ?)) [bind: 'Cyan', 'PageColour', '12', 'PageNumber']

    Unfortunately this isn't the required result. The final join should use t3
    and t4 rather than t1 and t4:

            t3.meta_type_id = t4.meta_type_id AND

    I've had a look at the cayenne code and it seems to come down to the
    following (from SelectTranslator.java) :

        private void appendJoins(StringBuffer queryBuf, int index) {
            DbRelationship rel = (DbRelationship) dbRelList.get(index);
            String srcAlias = aliasForTable((DbEntity) rel.getSourceEntity());
            String targetAlias = (String) aliasLookup.get(rel);

    The source alias is just being retrieved using the source entity. I would
    really prefer it to take notice of the relationship as well so as to
    retrieve the correct alias.

    I'm not entirely sure how to do this but would it be possible? I know it's
    not really a bug but it would help me a lot.

    Cheers,

    Dave



    This archive was generated by hypermail 2.0.0 : Tue Feb 14 2006 - 06:20:25 EST