So one problem that I now understand is that EJBQL doesn't support
navigating over to-many collections inline, so "foo.productStyles.taxonomy"
would be invalid. In order to do that you have to do this whole
"IN(foo.productStyles) styles" bit in the FROM clause, at least according to
the specs.
I don't know if this is causing the parse problem or not.. but it does
render the Expression.toEJBQL() rather useless. I would need to do my own
FROM/WHERE clause generation.
I'll plug away at this and will let you know what I find out..
Dave
On Fri, Dec 4, 2009 at 8:09 AM, Dave Lamy <davelam..mail.com> wrote:
> I can get rid of the likeIgnoreCase and see what happens. So I'm OK on the
> alias part right? In my other tests it didn't need an "as". I've mainly
> been concerned about whether that "doublehop" (.productStyles.taxonomy)
> would be valid or not.
>
> FYI that popped straight out of an Expression.toEJBSQL(). Not sure how
> best to handle situations like that, where the Expression supports a notion
> that EJBSQL does not.
>
> On Fri, Dec 4, 2009 at 7:31 AM, Andrus Adamchik <andru..bjectstyle.org>wrote:
>
>> "likeIgnoreCase" is not valid in EJBQL. Although the error message refers
>> to something else... strange...
>>
>>
>>
>> On Dec 4, 2009, at 4:12 AM, Dave Lamy wrote:
>>
>> Hey guys--
>>>
>>> I'm really just now getting into using the EJBQLQuery and am having some
>>> difficulties. I don't know whether I'm doing something fundamentally
>>> wrong
>>> or what.
>>>
>>> Here's my EJBQL expression that I'm trying to get parsed (running 3.0B1):
>>>
>>> select COUNT(foo) from ProductCollection foo where
>>> foo.productStyles.taxonomy likeIgnoreCase '323.%'
>>>
>>> Parsing this query yields the following exception:
>>>
>>>
>>> org.apache.cayenne.ejbql.parser.ParseException: Encountered "
>>> <IDENTIFIER>
>>> "foo "" at line 1, column 53.
>>> Was expecting:
>>> "(" ...
>>>
>>> at
>>>
>>> org.apache.cayenne.ejbql.parser.EJBQL.generateParseException(EJBQL.java:9419)
>>> at
>>> org.apache.cayenne.ejbql.parser.EJBQL.jj_consume_token(EJBQL.java:9298)
>>> at
>>>
>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_primary(EJBQL.java:1933)
>>> at
>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_factor(EJBQL.java:1911)
>>> at
>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_term(EJBQL.java:1776)
>>> at
>>>
>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_expression(EJBQL.java:1738)
>>> at
>>>
>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_primary(EJBQL.java:1928)
>>> at
>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_factor(EJBQL.java:1911)
>>> at
>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_term(EJBQL.java:1776)
>>> at
>>>
>>> org.apache.cayenne.ejbql.parser.EJBQL.conditional_expression(EJBQL.java:1738)
>>> at org.apache.cayenne.ejbql.parser.EJBQL.where_clause(EJBQL.java:1585)
>>> at
>>> org.apache.cayenne.ejbql.parser.EJBQL.select_statement(EJBQL.java:69)
>>> at org.apache.cayenne.ejbql.parser.EJBQL.parseQuery(EJBQL.java:41)
>>> ...
>>>
>>> The statement looks legit to me. Is there like a fundamental something
>>> I'm
>>> not understanding about EJBQL? I saw some docs that showed doing this
>>> sort
>>> of join alias "IN" thing,
>>>
>>> SELECT OBJECT(e) FROM Department d, IN(d.employees) e
>>> WHERE d.name = ?1 AND e.salary > ?2
>>>
>>> My problem is that I'm using Expression.toEJBQL() to gen the where
>>> clause..
>>> was hoping to not have to recreate my code that generates the Expression
>>> object.
>>>
>>> Help!
>>>
>>> Dave
>>>
>>
>>
>
This archive was generated by hypermail 2.0.0 : Fri Dec 04 2009 - 11:10:20 EST