Hi Michael,

the problem is, that I do not even get an iterator because executing a query 
like the following results in a Java Heap Space error:

ResultIterator it = dataContext.performIteratedQuery(query);

The answers to your questions are:

> 1) How many records are you talking about?
It's about half a million records

> 2) Are you updating your object with a flag/etc you can query on again later 
> (to exclude objects you've already processed)?
I already do exclude objects by setting them to a different state. But it may 
happen that I have to process half a million records despite of this.

> 3) What version of Cayenne are you using and what database?
Cayenne 3.0.2, Postgres 9.1

> 4) When you convert your Map (from the iterated query) into a DataObject, are 
> you creating a new DataContext or using the old one over and over again?
At the moment I am using just one DataContext unregistering the processed 
objects. But as mentioned above execution does not even get to this point.

Simon

> Hi Simon, some questions:
> 
> 1) How many records are you talking about?
> 2) Are you updating your object with a flag/etc you can query on again later 
> (to exclude objects you've already processed)?
> 3) What version of Cayenne are you using and what database?
> 4) When you convert your Map (from the iterated query) into a DataObject, are 
> you creating a new DataContext or using the old one over and over again?
> 
> For #4, if you are using the same DataContext repeatedly, try changing your 
> logic to something more like:
> 
> while (iterator.hasNextRow()) {
>     DataContext context = DataContext.createDataContext();
>     Map row = (Map) iterator.nextRow();
>     CayenneObject object = (CayenneObject) 
> context.objectFromDataRow("CayenneObject", row);
>     ...
>     object.doStuff();
>     ...
>     context.commitChanges();
> }
> 
> This way you won't build up a ton of objects in a single DataContext and 
> possibly run out of memory.
> 
> mrg

Reply via email to