Re: EJBQL and Refreshing Data

From: Andrew Lindesay (ap..indesay.co.nz)
Date: Thu May 06 2010 - 06:02:27 EDT

  • Next message: Andrus Adamchik: "Re: EJBQL and Refreshing Data"

    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:03:08 EDT