Stefan S. created CAY-2669:
------------------------------
Summary: Ordering of related entities via relationship definition
Key: CAY-2669
URL: https://issues.apache.org/jira/browse/CAY-2669
Project: Cayenne
Issue Type: Improvement
Components: Core Library, Modeler
Affects Versions: 4.1
Reporter: Stefan S.
Attachments: Modeler-FR-Ordering-Property-in-Relationship-Dlg.png
+*Current Situation:*+
'Details' entities are related to their 'master' entities as specified by their
DB- and object relationships in Cayenne Modeler. When a list of detail
entities is accessed via according methods of the master object, a query is
generated according to the defined relationship and executed to resolve the
details objects.
For example, the generated query for retrieving all PAINTINGS of an artist is
something like:
{code:java}
SELECT t0.id, t0.name, t0.artist_id, t0.gallery_id FROM PAINTINGS t0 WHERE
t0.artist_id = 999;{code}
+*Feature Request:*+
It shall be possible, to optionally define the ordering of the details entities
on DB level (by the query) as attribute of the specific relationship by one or
more properties of the details entity.
Cayenne Modeler shall support this relationship attribute (e.g. as additional
property of the dialog shown below).
This means, that if no ordering is defined, everything stays as is.
If an ordering is defined, the relationship query of the example above shall be
generated as
{code:java}
SELECT t0.id, t0.name, t0.artist_id, t0.gallery_id FROM PAINTINGS t0 WHERE
t0.artist_id = 999 ORDER BY t0.name ASC;{code}
to order the associated paintings by their name.
When additional details objects are attached to the master object on Java
level, the ordering should be maintained, ideally upon the next 'read access'
to the ordered list property since the order is typically not relevant for
persisting the list.
Maintaining the ordering upon modification of the properties relevant for
ordering is not required, but a programmatic way to restore the defined order
on Java level is required.
+*Benefit:*+
Convenience: Currently either 'hacks' or separate queries are required to
implement this behavior. A built-in solution, esp. when invloving Cayenne
Modeler, is easier to define and to maintain.
Performance: If not using a separate query it is currently difficult to figure
out when the list need to reordered. Separate, explicit queries are a
significant extra effort for a feature (modelled relationships) that is
'almost' available and the optimal (as part of object resolution) execution is
again not easy to implement (at least without deep knowledge of Cayenne
internals). The requested feature psuhes sorting of entities onto DB level
(which is typically performant) and is therefore executed only during entity
resolution and (lazyly) upon adding additional details object to the list.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)