cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <>
Subject Re: lightweight object fetching
Date Thu, 16 Apr 2015 17:34:22 GMT
Use EJBQLQuery. It is old style and requires String concatenation, but supports fetching individual
columns and does not require SQL:

EJBQLQuery q =
   new EJBQLQuery("SELECT p.firstName, p.lastName, sum(s.sales) FROM Person p INNER JOIN

We are working to support this in ObjectSelect as well.


> On Apr 15, 2015, at 12:20 PM, Aristedes Maniatis <> wrote:
> Cayenne has very nice functionality for paging large lists of objects, so that the list
is mostly hollow objects which are retrieved in a lazy fashion as they are accessed.
> This works well to fetch 100,000 contacts in a list and only draw the ones visible to
the user as they scroll. What works less well is the common use case of a list view where
you might only want to show several attributes of a large record.
> So a list of contacts might show just:
> * firstName
> * lastName
> * totalSales
> To fetch this data requires a query on contact with a prefetch to invoices. Lots of data
being loaded from two or more tables and potentially a bit slow.
> Some options:
> 1. Use DataRows. This is simple, but you lose some of the nice modelling/entity features
from Cayenne. You have to type all the columns yourself.
> 2. Create a view in the database with just three columns (plus a PK) and create a separate
read-only Cayenne model which maps to that view. But now you are hardcoding your application
to a specific database and changing the representation is hard.
> I want something half way between the two. SQLtemplate to fetch only the columns or aggregates
I need, but mapped to some sort of read-only lightweight Cayenne entity.
> Has anyone tried something like this?
> Ari
> -- 
> -------------------------->
> Aristedes Maniatis
> GPG fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A

View raw message