[
https://issues.apache.org/jira/browse/CAY-1681?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andrei Veprev updated CAY-1681:
-------------------------------
Attachment: CAY-1681.patch
> Third prefetch kind - DISJOINT_BY_ID
> ------------------------------------
>
> Key: CAY-1681
> URL: https://issues.apache.org/jira/browse/CAY-1681
> Project: Cayenne
> Issue Type: Task
> Components: Core Library
> Reporter: Andrus Adamchik
> Assignee: Andrus Adamchik
> Attachments: CAY-1681.patch
>
>
> (here is a mailing list thread discussing the issue:
> http://markmail.org/message/zzyd26ucfwhnacfe )
> I keep encountering a common scenario where neither JOINT or DISJOINT
> prefetch strategies are adequate - queries with fetch limit. It is very
> common in the application to display X most recent entries from a table with
> millions of rows, and then drill down to the object details. E.g. assume 2
> entities - "Order" and "LineItem", with orders having multiple line items. We
> want 10 most recent orders, with line items prefetched, so you'd so something
> like this:
> SelectQuery q = new SelectQuery(Order.class);
> q.addPrefetch("lineItems");
> q.setFetchLimit(10);
> "Disjoint" prefetch in this situation would fetch 10 orders and ALL LineItems
> in DB.
> "Joint" prefetch will fetch anywhere between 1 and 10 orders, depending on
> how many line items the first 10 orders have, i.e. fetch limit is applied to
> to-many join, not to the query root. And this is certainly not what we want.
> Now Cayenne already has something that can solve the problem:
> q.setPageSize(10); // same as fetch limit
> Paginated query is the most optimal way to prefetch here. Whenever a result
> list is accessed, Cayenne would execute 2 IN () queries - one for the Orders,
> another one - for the LineItems. Both queries are matching on a set of Order
> PKs and are pretty efficient, and only return the objects that we care about.
> The problem with this solution is that it is counterintuitive to the user
> (why should I set "pageSize" to make my prefetches work) and adds one extra
> query (the IN query resolving the root object list). Would be cool to turn it
> into a separate type of prefetch. Something like "disjoint by id"?
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira