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

Reply via email to