Re: EJBQL and Refreshing Data

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Thu May 06 2010 - 06:08:57 EDT

  • Next message: Andrew Lindesay: "Re: EJBQL and Refreshing Data"

    Yes, the syntax is something like this:

    [LEFT[OUTER]|INNER]JOIN FETCH

    So you are looking for "LEFT JOIN FETCH", not just "LEFT JOIN".

    I.e. "FETCH" is what does the prefetching of a relationship, and the
    rest is specifying the join semantics and can be used with or without
    prefetching.

    Andrus

    On May 6, 2010, at 1:02 PM, Andrew Lindesay wrote:

    > Hi Andrus;
    >
    > Thanks for the suggestion. I did try that with this;
    >
    > SELECT u FROM FooBar u OUTER JOIN u.someToMany c WHERE u.userType
    > = :userType ORDER BY u.username
    >
    > I get the following exception;
    >
    > Caused by: org.apache.cayenne.ejbql.parser.ParseException:
    > Encountered " "OUTER" "OUTER "" at line 1, column 25.
    > Was expecting one of:
    > <EOF>
    > "," ...
    > "ORDER" ...
    > "WHERE" ...
    > "GROUP" ...
    > "HAVING" ...
    > "LEFT" ...
    > "INNER" ...
    > "JOIN" ...
    >
    > at
    > org
    > .apache.cayenne.ejbql.parser.EJBQL.generateParseException(EJBQL.java:
    > 9419)
    > at
    > org.apache.cayenne.ejbql.parser.EJBQL.jj_consume_token(EJBQL.java:
    > 9298)
    >
    > I also tried a LEFT JOIN which I think would do what I want and it
    > certainly picks up the rows as I would anticipate from the SQL log,
    > but the to-many doesn't seem to freshen.
    >
    > cheers.
    >
    >> IIRC there's also an OUTER fetch join that handles this case.
    > ...
    >>>> yeah, you can use fetch joins (since 3.0). something like
    >>>> select f FROM FooBar f inner join fetch f.bars b ...
    > ...
    >>> I tried that and it produces a query which excludes objects from
    >>> the result-set where there is nothing in the join. The behaviour
    >>> of "query.addPrefetch(..)" would be to run two SELECT database
    >>> queries to get the additional data and freshen-up the relationship
    >>> if my thinking is correct.
    >
    > ___
    > Andrew Lindesay
    > www.silvereye.co.nz
    >



    This archive was generated by hypermail 2.0.0 : Thu May 06 2010 - 06:09:28 EDT