You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Francois Eyl <fe...@smaeur.com> on 2008/02/07 22:44:28 UTC

Pb implement JOIN function

Hello guys,

I have a question about how to join multiple object entities.

Concrete sample :

I have 2 tables with no foreign key between them (poor database).

The first one is named SMASTER with 5 columns [SKDDATE (PK), SKDID (PK), 
JOBNAME (PK), JOBSTATUS, STSTATUS].
The second one is named JSTATMAP with 3 columns, [JOBSTATUS (PK), 
STSTATUS (PK), FILTERCAT].

I also have my cayenne user object entities named Smaster and Jstatmap 
with all their properties and their getters and setters.

I'm trying to create a cayenne query to retrieve Smaster objects related 
to a specifique FILTERCAT value. In pure SQL the request would be 
something like that:

SELECT SKDDATE, SKDID, JOBNAME, JOBSTATUS, STSTATUS
FROM SMASTER
    INNER JOIN JSTATMAP ON
        JSTATMAP.JOBSTATUS=SMASTER.JOBSTATUS AND
        JSTATMAP.STSTATUS=SMASTER.STSTATUS
WHERE JSTATMAP.FILTERCAT='CANCELLED'

But I can't find the way with cayenne to do the same thing with Query 
and Expressions. Is there a way to do a "JOIN" between two or multiple 
cayenne object entity?

Thanks.

Francois

Re: Pb implement JOIN function

Posted by Francois Eyl <fe...@smaeur.com>.
Hi Michael,

thanks for your reply, that works for me ;)

Michael Gentry wrote:
> Using Cayenne Modeler, you can define a relationship from SMASTER to
> JSTATMAP using two joins.  Create the join, say in SMASTER, and click
> the "I" inspector button to establish this.  Will this do what you
> want?  If so, then you should be able to perform your query something
> like this:
>
> Expression expression = Expression.fromString("jstatmap.filtercat =
> 'CANCELLED'");
> SelectQuery  = new SelectQuery(Smaster.class, expression);
> List values = dataContext.performQuery(query);
>
>
> If this isn't what you are looking for, look into the SQLTemplate feature.
>
> /dev/mrg
>
>
> On Feb 7, 2008 4:44 PM, Francois Eyl <fe...@smaeur.com> wrote:
>   
>> Hello guys,
>>
>> I have a question about how to join multiple object entities.
>>
>> Concrete sample :
>>
>> I have 2 tables with no foreign key between them (poor database).
>>
>> The first one is named SMASTER with 5 columns [SKDDATE (PK), SKDID (PK),
>> JOBNAME (PK), JOBSTATUS, STSTATUS].
>> The second one is named JSTATMAP with 3 columns, [JOBSTATUS (PK),
>> STSTATUS (PK), FILTERCAT].
>>
>> I also have my cayenne user object entities named Smaster and Jstatmap
>> with all their properties and their getters and setters.
>>
>> I'm trying to create a cayenne query to retrieve Smaster objects related
>> to a specifique FILTERCAT value. In pure SQL the request would be
>> something like that:
>>
>> SELECT SKDDATE, SKDID, JOBNAME, JOBSTATUS, STSTATUS
>> FROM SMASTER
>>     INNER JOIN JSTATMAP ON
>>         JSTATMAP.JOBSTATUS=SMASTER.JOBSTATUS AND
>>         JSTATMAP.STSTATUS=SMASTER.STSTATUS
>> WHERE JSTATMAP.FILTERCAT='CANCELLED'
>>
>> But I can't find the way with cayenne to do the same thing with Query
>> and Expressions. Is there a way to do a "JOIN" between two or multiple
>> cayenne object entity?
>>
>> Thanks.
>>
>> Francois
>>
>>     
>
> _________________________________________________________________________
>
> Ce message a été vérifié par l'antivirus de MDaemon (md6).
>
> Par précaution, n'ouvrez pas de pièces jointes de correspondants inconnus.
> _________________________________________________________________________
>
>
> ___________________________________________________
>
> Ce message a été vérifié par l'antivirus de MDaemon 5 .
>
> Par précaution, n'ouvrez pas de pièces jointes de correspondants inconnus.
> ___________________________________________________
>
>
>   


Re: Pb implement JOIN function

Posted by Michael Gentry <bl...@gmail.com>.
Using Cayenne Modeler, you can define a relationship from SMASTER to
JSTATMAP using two joins.  Create the join, say in SMASTER, and click
the "I" inspector button to establish this.  Will this do what you
want?  If so, then you should be able to perform your query something
like this:

Expression expression = Expression.fromString("jstatmap.filtercat =
'CANCELLED'");
SelectQuery  = new SelectQuery(Smaster.class, expression);
List values = dataContext.performQuery(query);


If this isn't what you are looking for, look into the SQLTemplate feature.

/dev/mrg


On Feb 7, 2008 4:44 PM, Francois Eyl <fe...@smaeur.com> wrote:
> Hello guys,
>
> I have a question about how to join multiple object entities.
>
> Concrete sample :
>
> I have 2 tables with no foreign key between them (poor database).
>
> The first one is named SMASTER with 5 columns [SKDDATE (PK), SKDID (PK),
> JOBNAME (PK), JOBSTATUS, STSTATUS].
> The second one is named JSTATMAP with 3 columns, [JOBSTATUS (PK),
> STSTATUS (PK), FILTERCAT].
>
> I also have my cayenne user object entities named Smaster and Jstatmap
> with all their properties and their getters and setters.
>
> I'm trying to create a cayenne query to retrieve Smaster objects related
> to a specifique FILTERCAT value. In pure SQL the request would be
> something like that:
>
> SELECT SKDDATE, SKDID, JOBNAME, JOBSTATUS, STSTATUS
> FROM SMASTER
>     INNER JOIN JSTATMAP ON
>         JSTATMAP.JOBSTATUS=SMASTER.JOBSTATUS AND
>         JSTATMAP.STSTATUS=SMASTER.STSTATUS
> WHERE JSTATMAP.FILTERCAT='CANCELLED'
>
> But I can't find the way with cayenne to do the same thing with Query
> and Expressions. Is there a way to do a "JOIN" between two or multiple
> cayenne object entity?
>
> Thanks.
>
> Francois
>