I've personally avoided Hibernate, so I can't speak to the spring/ hibernate stuff, sorry.

For sorting across multiple relationships, if you want to do it in- memory, you can always use cayenne's "Ordering". You can add multiple orderings to any particular query, and you can also use multiple orderings on an in-memory list.
For example:

//sort an in-memory list of enrollments by the associated students' lastName then firstName
List<Ordering> orders = Arrays.asList(
        new Ordering("student.lastName",true),
        new Ordering("student.firstName",true));

Ordering.orderList(enrollments,orders);

//fetch a list of enrollments from the db, pre-ordered by the associated student lastname and firstname

SelectQuery query = new SelectQuery(Enrollment.class);
query.addOrdering("student.lastName",true);
query.addOrdering("student.firstName",true);

DataContext.getThreadDataContext().performQuery(query);

You can also create queries in the modeler tool, which supports adding multiple orderings.

HTH,

Robert


On Feb 27, 2008, at 2/277:51 AM , 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.

--
Kevin Menard
Servprise International, Inc.
Remote reboot & power control for your network
www.servprise.com                  +1 508.892.3823 x308


-----Original Message-----
From: Marek Wawrzyczny [mailto:[EMAIL PROTECTED]
Sent: Tuesday, February 26, 2008 7:14 AM
To: [email protected]
Subject: Cayenne and Spring (a Hibernate inspired question)

Hi,

It has been a while since I last used Cayenne and that was within a
Swing ROP
context.

More recently I have been involved in writing a Spring MVC/Hibernate
application. The experience has only made me fonder for Cayenne and
now
it
appears that the team I'm in may consider ORM alternatives.

My application is relatively simple CRUD application with the
exception
of one
set of two screens, where all data entry culminates in a parent/child
interface (using Spring's AbstractWizardFormController ).

The object graph can become somewhat complex, combining objects from
about 10
different entities. The pages ideally would require a long-running
session,
or rather a ObjectContext spanning several requests.

I'm curious as to how well does Cayenne handle these types of
interfaces in
web applications.

The other problem we're currently having is sorting across multiple
relationships.

I'm curious as to other people's experiences in this area. I would
love
to be
able to convince the team to move to Cayenne if the framework fits the
bill.


Kind regards,

Marek Wawrzyczny

Reply via email to