On 04/03/2007, at 1:22 AM, Mike Kienenberger wrote:

For your first case, be sure that $select also returns a field named id.
It does return id. The response contains the joined tables AppleTree and Apple, and $select has only the AppleTree fields listed: AppleTree.id, AppleTree.height etc. Still the object is not faulted and the exception is produced.

For your second case, you have rooted your query on AppleTree, but you
are basing your query as if you were rooted on Apple.  Provide a path
from AppleTree to Apple.

SelectQuery sq = new SelectQuery(AppleTree.class,
ExpressionFactory.matchExp(AppleTree.APPLES + "." + Apple.COLOR,
"red") );
Yes, I'm doing that, I wrote it not correctly in the message only, as the real life example is far more complex than the Apple/AppleTree model.
Anyway the Expression does not affect the result.
Regards
Marcin

On 3/3/07, Marcin Skladaniec <[EMAIL PROTECTED]> wrote:
Hi
I'm still struggling trying to fetch only AppleTrees with Apples
which are red.

Apple -AppleTree is a simple many-to-one relationship. I dont want to
fault every appleTree and apple, I want to use either NamedQuery or
Expression.
When I attempt with NamedQuery like:
<sql><![CDATA[SELECT $select FROM AppleTree join Apple on
(AppleTree.id = Apple.treeId) where (Apple.color = 'red') ]]></sql>
I get a correct sql response, but cayenne fails to build up the
entities out of it:
org.apache.cayenne.CayenneRuntimeException: [v.3.0-SNAPSHOT Jan 19
2007 05:26:38] Remote error. URL - http://localhost:8181/angel- server-
cayenne; CAUSE - [v.3.0-SNAPSHOT Jan 19 2007 05:26:38] [v.3.0-
SNAPSHOT Jan 19 2007 05:26:38] Exception processing message
org.apache.cayenne.remote.QueryMessage. Root cause: [v.3.0-SNAPSHOT
Jan 19 2007 05:26:38] Null value for 'id'.

when I try with Expression the expression is ignored and makes no
difference, (is there an automatic join clause created ?):
SelectQuery sq = new SelectQuery(AppleTree.class,
ExpressionFactory.matchExp(Apple.COLOR, "red") );

Does someone have any hints ?
Marcin



On 01/03/2007, at 12:48 AM, Mike Kienenberger wrote:

> You may be right.  I vaguely recall now that this only works for
> to-one relations.   For to-many relations, I can't remember how I
> handled this.
>
>
> On 2/28/07, Marcin Skladaniec <[EMAIL PROTECTED]> wrote:
>> Hi
>> Mike, the ExpressionFactory.noMatchExp(AppleTree.APPLE_PROPERTY,
>> null) does not work. I tried. I recollect I used Expression which
>> aimed other way around (from many to one, example :
>> ExpressionFactory.noMatchExp(Apple.APPLE_TREE_PROPERTY, null) ).
>> Marcin
>>
>>
>> On 28/02/2007, at 11:11 AM, Mike Kienenberger wrote:
>>
>> > ExpressionFactory.noMatchExp(AppleTree.APPLE_PROPERTY, null)
>> >
>> > Be aware that you cannot safely combine this expression with other >> > expressions due to outer join issues, unless you're using the outer >> > join patch. I think there was another null-related fix mixed into
>> > that patch.
>> >
>> > On 2/27/07, Marcin Skladaniec <[EMAIL PROTECTED]> wrote:
>> >> Hi
>> >>
>> >> I have a simple one-to-many relationship : AppleTree - Apple. I'm
>> >> doing a query :
>> >> new SelectQuery(AppleTree.class, expression)
>> >> how should the expression look like to return the trees with
>> apples ?
>> >> expression = ExpressionFactory.noMatchExp(AppleTree.APPLES, null)
>> >> does not seem to work, neither does
>> >> expression = ExpressionFactory.noMatchExp("applesArray", null)
>> >>
>> >> Regards
>> >> Marcin
>> >>
>>
>> Marcin
>>
>>
>>
>>

Marcin





Marcin



Reply via email to