I've tried the ScrollableResult solution and the performance is acceptable enough.
But now instead of using Criteria, I have to dynamically create a query string which I personally find a lot less elegant than Criteria (see code snippet below).
What I've seen so far lead me to the following conclusions:
1 Criteria results can't be scrolled
2 There is no way to translate a Criteria object to a hql string.
Am I correct? If so, will these be features available in hibernate 3?
Regards,
Wouter
HQL Code
-------------
Code:
private Query createAddressQuery(LeadCriteria criteria, Session session) throws HibernateException{
String queryString = "from nl.<obfuscated>.Address address where (1=1) ";
//begin or
boolean salutation = false;
if (criteria.getSalutations().size() > 0){
queryString += "and address.salutation in (:salutation)";
salutation = true;
}
Query addressQuery = session.createQuery(queryString);
if (salutation){
Iterator iter = criteria.getSalutations().iterator();
List salutationsList = new ArrayList();
while (iter.hasNext()){
salutationsList.add(((SalutationCriteria)iter.next()).getSalutation());
}
addressQuery.setParameterList("salutation", salutationsList);
}
return addressQuery;
}
Criteria code
---------------
Code:
private Criteria createAddressCriteria(LeadCriteria criteria, Session session){
Criteria addressCriteria = session.createCriteria(Address.class);
//salutations
Disjunction salutationsOr = Expression.disjunction();
Iterator salutationsIter = criteria.getSalutations().iterator();
while (salutationsIter.hasNext()){
SalutationCriteria salCr = (SalutationCriteria)salutationsIter.next();
salutationsOr.add(Expression.eq("salutation", salCr.getSalutation()));
}
addressCriteria.add(salutationsOr);
return addressCriteria;
}