If we were getting DataRow(s) returned then yes, but with a column[] no, and as far as I know there's no way to restructure the ObjectSelect query to return suitable DataRow(s).

Alternatively there is a way to do the transformation as part of the query with:

List< OBJECT_E > results = ObjectSelect.query( ObjEntityA.class )
.columns( .... )
.where( .... )
.map( col -> createObjectE( col ) )
.select( context );



On Wed, 31 Jan 2024 18:26:46 +0200, Christian Gonzalez <christian.gonza...@smartscrubs.com> wrote:

Unfortunately the relationship between ObjectEntityE and ObjectEntityA is
only one way and it's going from A to E not the other way around which was
one of the reasons why the query was originally done using raw SQL
statements. Is there a way of manually doing what I'm imagining object
select does in the background when we specify ObjEntity.class in the query?


On Wed, Jan 31, 2024 at 12:21 AM Jurgen Doll <jur...@ivoryemr.co.za> wrote:

Hi Christian

Since the selected columns are all that’s required for ObjEntityE and
there’s a simple relationship between ObjEntityE and ObjEntityA we should
be able to just get ObjEntityE directly:

List<ObjEntityE> results = ObjectSelect.query( ObjEntityE.class )
.where( ObjEntityE.PROP_FOR_OBJ_A
     .dot( ObjEntityA.PROP_FOR_OBJ_B )
     .dot( ObjEntityB.PROP_FOR_OBJ_C )
     .dot( ObjEntityC.PROP_FOR_OBJ_D )
     .dot( ObjEntityD.PROP_B )
     .eq( "somevalue" ) )
.select( context );

Regards
Jurgen


From: Christian Gonzalez
Sent: Tuesday, 30 January 2024 18:22
To: user@cayenne.apache.org
Subject: Re: Complicated SQL queries

Sorry for the late follow up, but this query did return the rows I wanted using purely cayenne expressions and object select rather than creating a new objEntity in the model. My last question is if there is any fast way to
convert the returned Array Objects into the ObjEntity class for
ObjectEntityA. The three rows should be the only properties in the class so
I was wondering if there was a faster way to automatically convert them
rather than having to create a new Object using objectContext.newObject and
manually setting the values.

On Mon, Jan 22, 2024 at 12:19 AM Jurgen Doll <jur...@ivoryemr.co.za>
wrote:

> Ahh, my bad again - I missed the whole point of using ObjectSelect
> somehow, probably because it's difficult to explain without having your > model. Anyways here's a shot at it, conceptually the same as what you did
> in the modeller:
>
> List<Object[]> results = ObjectSelect.query( ObjEntityA.class )
> .columns( ObjEntityA.PROP_FOR_OBJ_E.dot( ObjEntityE.PROP_A ),
> ObjEntityA.PROP_FOR_OBJ_E.dot( ObjEntityE.PROP_B ), > ObjEntityA.PROP_FOR_OBJ_E.dot( ObjEntityE.PROP_C ) ) > .where( ObjEntityA.PROP_FOR_OBJ_B.dot( ObjEntityB.PROP_FOR_OBJ_C ).dot(
> ObjEntityC.PROP_FOR_OBJ_D )
>                   .dot( ObjEntityD.PROP_B )  // this is t3.varB
>                   .eq( "somevalue" ) )
> .select( context );
>
>
>
> On Fri, 19 Jan 2024 22:45:24 +0200, Christian Gonzalez
> <christian.gonza...@smartscrubs.com> wrote:
>
> > Looks like it worked, thank you. It is definitely an interesting way of > > doing it although I'm not sure about how I feel about having to make a
> > new
> > entity every time a query like this is used but hopefully it won't be
too
> > often.
> >
> > Thank you for your help.
> >
> >
> > On Wed, Jan 17, 2024 at 11:08 AM Jurgen Doll <jur...@ivoryemr.co.za>
> > wrote:
> >
> >> Ahh, sorry my bad I didn't see the t0 for tableE.
> >>
> >> There may be other ways to do it but I think adding t3.varB as an
> >> attribute to the object entity might be the simplest.
> >>
> >> Regards
> >> Jurgen
>




--
Using Opera's mail client: http://www.opera.com/mail/

Reply via email to