cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Zeigler <>
Subject Re: Insert at a particular position in the detail list
Date Fri, 26 Sep 2008 19:39:48 GMT
I disagree.  By the "intrinsic attribute" argument, we wouldn't be  
trying to support inheritance and other useful features.
The point of ORM is to bridge the gap that exists between Object  
Models and Relational Models.  The fact is that, in java, at least,
java.util.List is ordering-aware: you expect items that go into the  
list to come back out in the same order.  So supporting the notion of  
an ordered collection of items, particularly when the relationship is  
mapped as a List,
is probably "the right thing" to do.

In fact, ordering /is/ an intrinsic database /operation/ on a  
relationship, although not an intrinsic /attribute/.  But it happens  
often enough that you /do/ care about the ordering of the relationship  
that it would be awfully nice to /not/ have to override the getter/ 
setter to provide sorting.  This is, of course, how I've done things  
in the past... and wished cayenne had built-in support for ordered  
collections. Having the sorting occur in the getter is inefficient;  
unless you take great pains to ensure that you don't re-sort unless  
absolutely necessary, then every fetch of your list is an o(n)  
operation, instead of just the first operation (which will load the  
values, or at least the keys, from the db) being an O(n) operation.   
If we shifted the burden of managing ordered relationships to cayenne,  
then cayenne can handle the complexity of determining when a  
collection has been modified/needs to be resorted, vs. when it  
doesn't, and we can minimize the effect of having ordered collections.

Finally, Hibernate and other ORM tools support this feature; I'm not  
saying we should implement every feature of other ORMS; cayenne has  
its set of strengths that appeal to the people who use it, and some  
"features" of other ORMS are just a pain.  But I think this is one  
case where supporting a feature supported by all of the major ORM  
players would make Cayenne more competitive.

So, from the "theoretical" perspective (what does an ORM do), from a  
pragrmatic perspective (nice to offload and reuse the burden of  
efficient sorted relationship management), and the "competition"  
perspective, we really ought to support sorted lists.


On Sep 26, 2008, at 9/261:47 PM , Scott Anderson wrote:

> Cayenne is there to abstract the interface to the tools that the
> database provides, not to obfuscate the tools. Custom ordering is  
> not an
> intrinsic attribute of a relationship in the database; it should not  
> be
> an intrinsic attribute of a relationship in Java.
> If you need to sort the results or a JOIN, override the getter. If you
> need to maintain custom ordering, model a linked list in your schema.
> This just isn't Cayenne's responsibility.

View raw message