2009-02-06 22 views
9

que estoy tratando de hacer la paginación con Hibernate utilizando setFirstResult() y setMaxResults() pero no estoy consiguiendo los resultados esperados cuando se ajusta el primer resultado a 0.setFirstResult de Hibernate() problema con Oracle controlador JDBC

Al hacer la siguiente :

Query query = session.createQuery(queryString); 
query.setFirstResult(0); 
query.setMaxResults(30); 
List list = query.list(); //list.size() returns 10 

pero si fijo el primer resultado a 1 (o cualquier cosa diferente a 0 para el caso):

query.setFirstResult(1); 
query.setMaxResults(30); 
List list = query.list(); //list.size() returns 30 

Leí esto es un error conocido en el controlador jdbc, pero busqué una solución y parece que no puedo encontrarlo. ¿Alguien ha encontrado algo similar y ha encontrado una solución para ello?

Respuesta

13

Al parecer, agregar setFetchSize() hace el truco. Así que algo como esto ahora funciona perfectamente:

query.setFirstResult(0); 
query.setMaxResults(30); 
query.setFetchSize(30); 
List list = query.list(); //list.size() now returns... wait for it... 30 
+3

¡Eres un hombre maravilloso! Acabo de tener este problema exacto y 'setFetchSize()' lo solucionó de inmediato. – Nick

1

Otra solución es poner en práctica su propio dialecto de Oracle:

public class Oracle10gDialectLimitBugfix extends Oracle10gDialect { 
    @Override 
    public boolean forceLimitUsage() { 
     return true; 
    } 
} 

Ver https://forum.hibernate.org/viewtopic.php?p=2379096

ACTUALIZACIÓN: Parece que se fija en Oracle 11.2.0.1 0

Cuestiones relacionadas