cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marcin Skladaniec <mar...@ish.com.au>
Subject Re: Cayenne and Spring (a Hibernate inspired question)
Date Thu, 28 Feb 2008 12:44:43 GMT
Hi

Short comment on the cayenne sorted queries, they work great but be  
aware of a limitation:
(the query examples assume one to many relation Artist-Painting)

SelectQuery query = new SelectQuery(Painting.class);
query.addOrdering(Painting.ARTIST_PROPERTY+"."+Artist.LAST_NAME,true);
will not return the Paintings without artist. This behaviour is  
correct 90% of the times, but would be awesome if it could be  
controlled and customized so the null in the order path does not alter  
the results.

also be aware that a query for a relationship existence (or non- 
existence) does not work:
SelectQuery query = new SelectQuery(Painting.class,  
ExpressionFactory.matchExp(Painting.ARTIST_PROPERTY, null));
so you might need a flag to indicate whether the relationship is set  
or not to allow easy querying and/or sorting.

If someone has a (simple) workaround to the problems I mentioned  
please share!

Cheers
Marcin

On 29/02/2008, at 8:03 AM, Marek Wawrzyczny wrote:

> Thanks Kevin,
>
> Your response was quite encouraging. Most of the pages are very  
> simple but
> there is one or two which enforces quite coplex workflow. It's a  
> perfect
> candidate for a child context.
>
> Just out of curiosity, how do people manage contexts in a typical CRUD
> application containing several (>10) entities. We're also using   
> AJAX calls
> (DWR).
>
> Regarding queries. Hibernate often handles lazy initialized  
> relationships very
> badly. There are two bugs I've hit where both HSQL and the Criteria  
> API (kind
> of like the query builder API in Cayenne) have trouble creating the  
> SQL
> query. Take the following two entities:
>
> Course
> name
> classes
>
> Cllass
>  course
> startsOn
> endsOn
>
> Hibernate could potentially have trouble building a query that would  
> return
> courses where we discrimante on both startsOn and endsOn properties  
> of a
> Class.
>
> An additional bug may prevent ordering on either startsOn or endsOn   
> if the
> property was used in the query.
>
> The issue is with the way Hibernate aliases the joins in the  
> resultset.
> Obviously, I'd want to avoid that in the future.
>
>
> Cheers,
>
> Marek Wawrzyczny
>
> On Thu, 28 Feb 2008 00:51:59 Kevin Menard wrote:
>> Hi Marek,
>>
>> My Hibernate experience is limited to a single project that did not  
>> use
>> Spring, so it's hard for me to draw a fair comparison.  My take from
>> passively watching on discussion lists (particularly the Tapestry  
>> one)
>> is that Spring makes Hibernate usable in a way that Cayenne is out of
>> the box.  It seems you know this already, though.
>>
>> In a Web app I have here, we an account creation operation split up  
>> over
>> three screens and it involves several different entities.  For  
>> this, I
>> simply used a peer context per page and coalesce everything at the  
>> end.
>> This is a little bit older code and I would likely use a child  
>> context
>> for it now.  The reason I did it this way is that while  
>> conceptually a
>> single operation, completing any of the phases is a complete
>> transaction.  If you want to enforce start to finish behavior, you  
>> could
>> use a single context shared via session.  Just watch yourself because
>> it's a lot harder to enforce a workflow through a browser than it is
>> through Swing.
>>
>> As for sorting across multiple relationships, I guess I would have to
>> understand a little more as to what you want to do.  Simplest thing  
>> is
>> to write your own Comparator, but you may want to look at mapping a
>> query, and barring that, use SQLTemplate to achieve what you need  
>> in the
>> DB.
>>
>> I hope that helps.
>
>


Mime
View raw message