Hi all,
I am using ScrollableResults within streaming mode
For some reason in the while loop I am having an exception:
Code:
11:54:24,182 WARN SqlExceptionHelper:143 - SQL Error: 0, SQLState: null
11:54:24,182 ERROR SqlExceptionHelper:144 - Streaming result set com.mysql.jdbc.RowDataDynamic@729d8721 is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
11:54:24,183 WARN CollectionLoadContext:347 - HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [3] entries
Exception in thread "Thread-11" java.lang.RuntimeException: Could not export
Code:
My scroller:
protected void scroll(ScrollableHandler<T> handler,String namedQuery, Object... values){
T previousEntity=null;
Session s = null;
ScrollableResults results = null;
try {
s = (Session) em.getDelegate();
org.hibernate.Query query = s.getNamedQuery(namedQuery);
for (int i = 0; i < values.length; i++)
query.setParameter(i, values[i]);
results = query.setFetchSize(fetchSize).scroll(ScrollMode.FORWARD_ONLY);
while(results.next()) -> [color=#FF0040] here I get the exception[/color]
{
T entity = (T) results.get(0);
if (null != entity &&
(! entity.equals(previousEntity))) {
doSomething(entity);
previousEntity = entity;
}
s.clear();
}
} finally {
if (results != null)
results.close();
}
}
I know I should have only one select while opening connection when using Scrolling.
But here is the thing: When I am using the scroller I see an additional select in the log files:
Code:
11:54:24,165 DEBUG SQL:104 - select userpart0_.id as id1_11_0_, ........
[b]11:54:24,181 DEBUG SQL:104 - select distributo0_.id as id1_1_1_,........[/b]
11:54:24,182 WARN SqlExceptionHelper:143 - SQL Error: 0, SQLState: null
11:54:24,182 ERROR SqlExceptionHelper:144 - Streaming result set com.mysql.jdbc.RowDataDynamic@729d8721 is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
11:54:24,183 WARN CollectionLoadContext:347 - HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [3] entries
Exception in thread "Thread-11" Java. Lang. RuntimeException: Could not export
at com...run(MyClass.java:59)
at java.lang.Thread.run(Thread.java:724)
....
I tried again to get the same data without using scroller. then did iteration on all record and watched the log file. I coudlnt see additional selectes beside the big one:
Code:
protected void regularNamedQuery(ScrollableHandler<T> handler,String namedQuery, Object... values){
Query query = em.createNamedQuery(namedQuery);
for (int i = 0; i < values.length; i++)
query.setParameter(i+1, values[i]);
List<UserPart> a = query.getResultList();
for (int x=0;x<a.size();x++)
{
System.out.println(a.get(x).getDistributorPart().getTaxonomyPath());
}
}
The system.out from the second code (regularNamedQuery) were:
39/622
39/622
39/622
39/622
Maybe that will give a hint?
All my data entities in the @ManyToOne are Lazy fetched (@ManyToOne(fetch = FetchType.LAZY))
I also have oneToMany relations in my statement. Maybe that's causing the problem?
Thanks for your help,
ray.