cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Stobbe <markstobb...@gmail.com>
Subject Re: Updating totals in a multi-user environment
Date Sat, 01 Nov 2014 14:44:58 GMT
Thank you Andrus!
I managed to get most of it into the existing framework. One quick
question, is it possible to use aliases for fields in the EJBQL query, e.g.:

*SELECT *o, *COUNT*(p) *AS *numberOfPackages
*FROM *Order o *JOIN *o.packages p
*WHERE *...
*GROUP BY *s

This would help greatly when getting the metadata of the query, because
above gives an exception and if I leave it out it just gives generated
names:

*QueryMetadata *metaData = query.getMetaData(oc.getEntityResolver());
*List*<*Object*> mapping = metaData.getResultSetMapping();
*for *(*int *i = 1; i < mapping.size(); i++)
{
  *ScalarResultSegment *segment = (*ScalarResultSegment*) mapping.get(i);
  System.out.println(segment.getColumn());
}

Mark


On Fri, Oct 31, 2014 at 9:50 AM, Andrus Adamchik <andrus@objectstyle.org>
wrote:

> > My problem with the solution is just the integration into Cayenne.
>
> EJBQLQuery supports aggregates:
>
> http://cayenne.apache.org/docs/3.1/cayenne-guide/queries.html#ejbqlquery
>
> The problem with it is that the query itself can only be created from
> String using a JPQL-like object query language, so you forfeit the type
> safety of SelectQuery. Still it is a much better abstraction then
> SQLTemplate for instance. (And its integration into SelectQuery is on the
> agenda).
>
> Andrus
>
>
> > On Oct 31, 2014, at 1:38 AM, Mark Stobbe <markstobbe85@gmail.com> wrote:
> >
> > @Andrus, I see. Good to know how to do this in Cayenne.
> >
> > @Michael, You are right. It makes more sense to let the database do the
> calculations. It prevents the race conditions when updating and ensures
> totals to be correct.
> > My problem with the solution is just the integration into Cayenne.
> > Do you use some extra classes to keep the totals? It would be perfect if
> the expression language could be extended to have an easy way to group and
> count associated entities!!
> >
> >
> >> On 30 okt. 2014, at 18:22, Michael Gentry <mgentry@masslight.net>
> wrote:
> >>
> >> The utilities I mentioned also do SUM, AVG, MIN, and MAX ...
> >>
> >>
> >>> On Thu, Oct 30, 2014 at 12:35 PM, Mark Stobbe <markstobbe85@gmail.com>
> wrote:
> >>> Oh, I also have the same problem with total cost with different
> >>> currencies...
> >>>
> >>>> On Thu, Oct 30, 2014 at 5:09 PM, Mark Stobbe <markstobbe85@gmail.com>
> wrote:
> >>>>
> >>>> Hi Michael,
> >>>>
> >>>> I would like to display the count in a table for a whole bunch of
> orders.
> >>>> In theory I could use a "group by"-query to get the numbers I need and
> >>>> with proper configured indices this should be fairly quick, I guess.
> >>>>
> >>>> Is there a more transparent way of doing things, e.g. using lifecycle
> >>>> listeners, datachannel filters and such?
> >>>>
> >>>> Mark
> >>>>
> >>>> On Thu, Oct 30, 2014 at 4:15 PM, Michael Gentry <
> mgentry@masslight.net>
> >>>> wrote:
> >>>>
> >>>>> Hi Mark,
> >>>>>
> >>>>> Is there a performance reason why you don't just do a count on the
> >>>>> packages that match the order?
> >>>>>
> >>>>> mrg
> >>>>>
> >>>>>
> >>>>> On Thu, Oct 30, 2014 at 11:00 AM, Mark Stobbe <
> markstobbe85@gmail.com>
> >>>>> wrote:
> >>>>>> Hi all,
> >>>>>>
> >>>>>> I was wondering what is the best way to update totals in a
> multi-user
> >>>>>> environment. For example, let's say we have an Order which can
have
> one
> >>>>> or
> >>>>>> more Packages associated and we want to maintain a total package
> count
> >>>>> on
> >>>>>> the Order entity. How would you update this value when the user
has
> the
> >>>>>> option to add/remove packages.
> >>>>>>
> >>>>>> So the entities looks like:
> >>>>>>
> >>>>>> *Order*
> >>>>>> --------
> >>>>>> id : bigint
> >>>>>> orderNumber : varchar
> >>>>>> nrOfPackages : int
> >>>>>>
> >>>>>> *Package*
> >>>>>> ------------
> >>>>>> id : bigint
> >>>>>> packageNumber : varchar
> >>>>>> *fk_order : bigint*
> >>>>>>
> >>>>>> What do you guys use to solve this?
> >>>>>> Mark
> >>>>
> >>>>
> >
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message