Robert,
Now I get it; Cayenne is totally cool!! :)
Here is the code I used:
ObjectContext oc = BaseContext.getThreadObjectContext();
Expression exp =
ExpressionFactory.likeIgnoreCaseExp("billAddress.lastName", "%clapt%");
SelectQuery query = new SelectQuery(Customer.class, exp);
List list = oc.performQuery(query);
Works great.
The essential component that I misunderstood was your dot-nomenclature
for the expression parameter. I had no idea that Cayenne supported
this "RelationshipProperty.PropertyName" type syntax. Very clever idea!
Thanks again. Cayenne is not only powerful but loads of fun to use. :)
Joe
On Mar 14, 2009, at 5:36 PM, Robert Zeigler wrote:
>
> On Mar 14, 2009, at 3/144:22 PM , Joe Baldwin wrote:
>
>> Robert,
>>
>> I am attempting a test but lost you on your Qualifier step.
>>
>>> SelectQuery query = new SelectQuery(Entity1.class);
>>
>> This is easy.
>>
>>> query.setQualifier(ExpressionFactory.matchExp(Entity1.EN|
>>> TITY2_PROPERTY,entity2));//where ENTITY2_PROPERTY is the name of
>>> object property in entity1 that points to entity2
>>
>> I don't follow this step. You are obviously using the
>> ExpressionFactory to create a qualifier expression for the query
>> but I don't follow the match expression.
>>
>> Lets say that entity1 is "Customer" and entity2 is "Detail". So
>> the code snippet would be
>> ExpressionFactory.matchExp(Customer.DETAIL_PROPERTY, entity2)
>>
>> I don't understand what entity2 stands for in this example. In
>> addition, I am trying to select based on the contents of the
>> entity2 field, so I am even more confused as to how this would
>> accomplish that objective.
>>
>
> Ok, Customer -> Detail.
> I'm still a little unclear on exactly what you're trying to do,
> based on your comment "based on the contents of the entity2 field",
> so I'll step through two scenarios:
>
> 1) You have a "detail" object reference, and you want to get the
> corresponding "customer".
> Then entity2 would be your detail object.
> ExpressionFactory.matchExp() takes a property path as its first
> argument and the corresponding value to match as its second.
> So,
> ExpressionFactory
> .matchExp
> (Customer.DETAIL_PROPERTY,someDetailForWhichYouHaveAReference);
>
> Of course, if this is a two-sided one-to-one (detail has a property
> for customer, as well as customer having a property for detail),
> then you could always just do:
> detail.getCustomer(); :)
>
> 2) You have some information related to a property of detail, say,
> "description".
> So the property path, from customer, might look like:
> "detail.description" (assuming customer is the root object of the
> property path).
> Or, you could write it as:
> Customer.DETAIL_PROPERTY + "." + Detail.DESCRIPTION_PROPERTY
> So you could do:
> ExpressionFactory.matchExp(Customer.DETAIL_PROPERTY + "." +
> Detail.DESCRIPTION_PROPERTY,"the description string")
> Or you could use a like expression:
> ExpressionFactory.likeExp(Customer.DETAIL_PROPERTY + "." +
> Detail.DESCRIPTION_PROPERTY,"the description to partial match");//
> <-- add % wildcards yourself here.
>
> HTH,
>
> Robert
>
>
>>> List<Entity1> e1 = objectContext.performQuery(query);//note:
>>> perform query is NOT generified, so you'll get a warning here.
>>
>>
>> This seems easy as well.
>>
>>
>> Thanks,
>> Joe
>>
>>
>> On Mar 14, 2009, at 3:53 PM, Robert Zeigler wrote:
>>
>>> Hi Joe,
>>>
>>> How about:
>>>
>>> SelectQuery query = new SelectQuery(Entity1.class);
>>> query.setQualifier(ExpressionFactory.matchExp(Entity1.EN|
>>> TITY2_PROPERTY,entity2));//where ENTITY2_PROPERTY is the name of
>>> object property in entity1 that points to entity2
>>> List<Entity1> e1 = objectContext.performQuery(query);//note:
>>> perform query is NOT generified, so you'll get a warning here.
>>>
>>> Robert
>>>
>>> On Mar 14, 2009, at 3/141:29 PM , Joe Baldwin wrote:
>>>
>>>> I am attempting to create the simplest Cayenne-expedient method
>>>> of doing the following query. (I can easily do this in SQL but am
>>>> a tad confused with the Cayenne Expression method.)
>>>>
>>>> I have an Entity (E1) with a one to one relationship with a
>>>> second entity (E2). I would like to perform a SELECT Query with
>>>> a filter on one of the fields of the relationship-entity (E2.F1)
>>>> and return a list of the first entity (E1List).
>>>>
>>>> What is the most efficient Cayenne way to do this? (I am still a
>>>> bit confused concerning how to construct efficient queries in the
>>>> object domain vs the relational domain.)
>>>>
>>>> Thanks,
>>>> Joe
>>>>
>>>>
>>>>
>>>
>>
>
This archive was generated by hypermail 2.0.0 : Sat Mar 14 2009 - 18:26:30 EDT