Hi Mike,
Hope you feeling better now.
To mention a related thing, Cayenne actually supports an expression
format that includes the root entity in the expression itself. That
would be EJBQL, and it is much more loaded...
Andrus
On Dec 26, 2007, at 4:29 PM, Mike Kienenberger wrote:
On Dec 25, 2007 9:14 PM, Aristedes Maniatis <[EMAIL PROTECTED]> wrote:
I have to confess to not quite understanding the boundaries between
Expression and Query. 99% of the times that it is used, a Query is
just an Expression with Ordering and a root entity. But I don't
understand why that root entity isn't part of the Expression itself -
does an expression have much meaning without a root entity? It is
always implied within the Expression, since you can't create an
expression which is meaningful for Artist.class and then create a new
SelectQuery(Painting.class).
Yes, you can!
Consider this:
select artist where artist_name = 'bob'
select painting p, artist a where p.artist_id = a.id and artist_name
= 'bob'
The expression is the same for both -- only the object path is
different.
Expression e = ExpressionFactory.matchExp(String pathSpec, "bob");
where
String pathSpec = Artist.ARTIST_NAME_PROPERTY;
or
String pathSpec = Painting.ARTIST_PROPERTY + "." +
Artist.ARTIST_NAME_PROPERTY;
Note also, that the pastSpec has the same suffix -- all you need to do
is adjust the prefix to account for a different root:
String pathSpec = rootPathSpecPrefix + Artist.ARTIST_NAME_PROPERTY;
where
rootPathSpecPrefix = "" for Artist, Painting.ARTIST_PROPERTY + "." for
painting, Gallery.PAINTING_LIST_PROPERTY + "." +
Painting.ARTIST_PROPERTY + "." for gallery.