ParseException with EJBQL expression

From: Dave Lamy (davelam..mail.com)
Date: Thu Dec 03 2009 - 21:12:28 EST

  • Next message: Andrus Adamchik: "Re: Referencing ID fields in EJBQL"

    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 : Thu Dec 03 2009 - 21:13:24 EST