public class JPQLSingleStringParser extends Object
SELECT [{result} ]
[FROM {from-clause} ]
[WHERE {filter}]
[GROUP BY {grouping-clause} ]
[HAVING {having-clause} ]
[ORDER BY {ordering-clause}]
[RANGE x,y]
e.g SELECT c FROM Customer c INNER JOIN c.orders o WHERE c.status = 1
or
UPDATE {update-clause}
WHERE {filter}
and update-clause is of the form "Entity [[AS] identifier] SET {field = new_value}, ..."
or
DELETE {delete-clause}
WHERE {filter}
and delete-clause is of the form "FROM Entity [[AS] identifier]"
Note that only the {filter} and {having-clause} can strictly contain subqueries in JPQL, hence containing keywords
SELECT c FROM Customer c WHERE NOT EXISTS (SELECT o1 FROM c.orders o1)So the "filter" for the outer query is "NOT EXISTS (SELECT o1 FROM c.orders o1)". Note also that we allow subqueries in {result}, {from}, and {having} clauses as well (vendor extension). If a subquery is contained we extract the subquery and then set it as a variable in the symbol table, and add the subquery separately. Note that the
[RANGE x,y]is a DataNucleus extension syntax to allow for specification of firstResult/maxResults in the query string and hence in subqueries and is dependent on enabling datanucleus.query.jpql.allowRange.
| Constructor and Description |
|---|
JPQLSingleStringParser(Query query,
String queryString)
Constructor for the Single-String parser.
|
| Modifier and Type | Method and Description |
|---|---|
JPQLSingleStringParser |
allowRange() |
void |
parse()
Method to parse the Single-String query
|
public JPQLSingleStringParser allowRange()
public void parse()
Copyright © 2018. All rights reserved.