Thank you both Hugi and Michael - very useful. It seems to me that this kind of aggregation functionality requirement is common enough to warrant adding a @sum/@avg/@max/@count to the Property much like in EOF? Perhaps I’ll create myself a custom superclass template for my entities...
Mark > On 13 Jun 2016, at 14:51, Hugi Thordarson <[email protected]> wrote: > > Hi Mark, > > here are also a few utility methods we use to execute aggregate methods, > updated for Cayenne 4.0.M4. > > https://bitbucket.org/loftfar/jambalaya/src/6b952b8f65e6ac45b77e16bcfa5e97f2b9a27245/src/main/java/jambalaya/CayenneUtils.java?at=master&fileviewer=file-view-default > > Cheers, > - hugi > > > >> On 12. jún. 2016, at 23:30, Michael Gentry <[email protected]> wrote: >> >> Hi Mark, >> >> For doing a count (and a few others), you can try using this: >> >> https://github.com/mrg/cbe/blob/master/FetchingObjects/Aggregates/src/main/java/cbe/fetching/utilities/AggregateUtils.java >> >> Example usage code is here: >> >> https://github.com/mrg/cbe/blob/master/FetchingObjects/Aggregates/src/main/java/cbe/fetching/Aggregates.java >> >> For your insert/update rows, I think you'll have to write that yourself. >> If your "data" dictionary/map object uses keys that match your entity's >> attribute names, You can probably loop over they keys and write the values >> using CayenneDataObject's writeProperty() method (CDO is a superclass of >> your actual entities). >> >> mrg >> >> >> >> On Sun, Jun 12, 2016 at 4:53 PM, Mark Wardle <[email protected]> wrote: >> >>> Dear all, >>> >>> I'm implementing a new project using Cayenne based on some code currently >>> running in a live application built using WO/EOF/Wonder (see >>> https://github.com/wardle/rsterminology) >>> >>> Migrating to Cayenne has been very straightforward so far. >>> >>> Within Project Wonder, there are a large number of utility methods to make >>> it easy to deal with qualifiers (expressions) and perform database agnostic >>> batch operations without using SQL. >>> >>> ERXEOControlUtilities.objectCountWithQualifier(ec, entityName, qual); >>> >>> which takes a qualifier (essentially a Cayenne expression) and an entity >>> and performs a count. >>> >>> ERXEOAccessUtilities.insertRow(ec, entityName, data); >>> >>> which takes a context, entity name and dictionary (a map) and inserts the >>> values without having to deal with entities (a bit like a DataRow I think >>> in Cayenne?). >>> >>> For example, we have >>> ERXEOAccessUtilities.updateRowsDescribedByQualifier(ec, entityName, qual, >>> data); >>> which takes a context, entity name, qualifier and a dictionary of data and >>> updates rows based on that data. >>> >>> Are there equivalent utility methods within Cayenne please? I have found >>> SQLTemplate but, it looks as if I'd have to hand-tune the expression to >>> update and get embroiled in creating to logic to understand the DbEntity >>> and its properties in order to map a map. It feels as if I'm probably >>> fighting the framework and so normally that suggests I'm approaching it >>> wrong! >>> >>> Advice for a WO-er appreciated. >>> >>> Best wishes, >>> >>> Mark >>> >
