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 <[email protected]> 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 <[email protected]> wrote:
>>
>> The utilities I mentioned also do SUM, AVG, MIN, and MAX ...
>>
>>
>>> On Thu, Oct 30, 2014 at 12:35 PM, Mark Stobbe <[email protected]> 
>>> 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 <[email protected]> 
>>>> 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 <[email protected]>
>>>> 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 <[email protected]>
>>>>> 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
>>>>
>>>>

Reply via email to