Hi,

I have an entity bean with a collection of items.


  | @OneToMany(cascade = { CascadeType.ALL}, fetch = FetchType.LAZY, mappedBy 
="invoice")
  | @BatchSize( size = 10)
  | public List<Item> getItems()
  | {
  |     return items;
  | }
  | 

Everything works fine in everyday use. But ocassionaly I would like to perform 
statistics, which is done through selecting all the entities and performing 
operation on their items.

Because there is a large number of objects I have to page through them in order 
to not to run out of memory. I made two attempts to solve this problems but 
both are unefficient and my method timeouts.

First approach.

My query looks like:

  | "select e from Example join fetch e.items where ..."
  | 

Then I page through the result set  and make my computations on result objects:

  |             int resIt = 0;
  |             List<Example> rl = null;
  |             do
  |             {
  |             
  |                     rl = q.setMaxResults( 
1000).setFirstResult(resIt).getResultList();
  | 
  |                     for (Example e: (List<Example>) rl)
  |                     {
  |                             //my code
  |                     }
  | 
  |                     resIt += rl.size();
  |                     entityManager.clear();
  | 
  |             } while (rl.size() > 0);
  | 

But then I got a warning "firstResult / maxResults specified with collection 
fetch ; applying in memory". I uderstand that when collection is fetched, 
Hibernate cannot use sql "limit" because number of rows is not equal to number 
of objects, and "in memory" means additional selects.

Second approach.
I removed join fetch from query. But then items collection are fetched ( in  
batch of 10) during computatins, which is also slow. I dont want to change the 
value of batch in mapping.

Do you see any solution to my problem? Maybe there is a way to temporarily 
increase the batch size of the collection (for the duration of my statistics 
method)?

Thanks in advance
Pawel Miniewicz 

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3969272#3969272

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3969272
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to