[ 
https://issues.apache.org/jira/browse/CAY-2669?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nikita Timofeev updated CAY-2669:
---------------------------------
    Fix Version/s: 5.0-M2
                       (was: 5.0-M1)

> 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.
>            Priority: Major
>             Fix For: 5.0-M2
>
>         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.20.10#820010)

Reply via email to