On 2/13/08 2:04 PM, "Eric Polino" <aluin..mail.com> wrote:
>>> 2. I've read in many places how Cayenne deals with joins for you, but
>>> nowhere do I see an example of how its done. Here's an example
>>> problem I'm dealing with.
>>>
>>> Schema:
>>>
>>> Reservation (n to 1) Site
>>> Site (n to 1)
>>> Site contains a type field
>>>
>>> I want to get all the Reservations of a given for a given type of
>>> site. In sql I would execute something like, "select * from
>>> Reservation, Site, SiteType where SiteType.Name='Something' and
>>> Site.typeID = SiteType.id and Reservation.siteID = Site.id"
>>>
>>> Short of writing an parameterized sql string and executing that in my
>>> code, how do I do that with Cayenne? I hope I explained all that well
>>> enough...make sense?
>>
>> Just map the relationships in the modeler. Cayenne takes care of the SQL
>> for you. The following guide should help you get started with the modeler:
>>
>> http://cayenne.apache.org/doc20/tutorial-starting-mapping-project.html
>
> I've been using the modeler and the relationships are setup, I just
> don't know how to do queries based on those relationship...ie the one
> mentioned above
Sorry. I glossed over the original question.
You want to use a qualifier expression:
http://cayenne.apache.org/doc/qualifier-expressions.html
Expression factory is the easiest way to do this:
http://cayenne.apache.org/doc/api/org/apache/cayenne/exp/ExpressionFactory.h
tml
So, you may have something like:
Query q = new SelectQuery(Site.class,
ExpressionFactory.matchDbExp(Site.NAME, "Something");
List<Site> sites = context.performQuery(q);
for (Site s :sites)
{
System.out.println(s.getReservation().toString();
}
You'll have to make substitutions as appropriate for your actual code.
--
Kevin
This archive was generated by hypermail 2.0.0 : Wed Feb 13 2008 - 14:27:04 EST