cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Gentry <mgen...@masslight.net>
Subject Re: Updating totals in a multi-user environment
Date Fri, 31 Oct 2014 01:48:25 GMT
Hi Mark,

Here is the code I mentioned if you want to try it (again, 3.0.2 --
might need tweaked for 3.1):

Actual utility code:

https://github.com/mrg/cbe/blob/master/FetchingObjects/Aggregates/src/main/java/cbe/fetching/utilities/AggregateUtils.java
https://github.com/mrg/cbe/blob/master/FetchingObjects/Aggregates/src/main/java/cbe/fetching/utilities/AggregateTranslator.java


Example that uses it:

https://github.com/mrg/cbe/blob/master/FetchingObjects/Aggregates/src/main/java/cbe/fetching/Aggregates.java


In your Order class, you could create a method:

public int getPackageCount()
{
  // Use AggregateUtils to perform a COUNT on Packages matching this Order.
  // query = new SelectQuery(Package.class);
  // query.setQualifier(ExpressionFactory.matcExp(Package.ORDER_PROPERTY,
this));
  // return AggregateUtils.count(getDataContext(), query);
}

This might be too slow if you need to do a LOT of Orders' Package
counts at once, but if nothing else, maybe it'll prove helpful/useful
somewhere.

mrg

PS. I'm sure there are typos above...didn't test any of it.  :-)


On Thu, Oct 30, 2014 at 6:38 PM, 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
View raw message