Nuestros desarrolladores estrellas han agotado sus reservas de café, buscando diariamente por la resolución, hasta que Lilian encontró la solución en GitLab y hoy la comparte con nosotros.
Solución:
Esto se publicó en el foro de Hibernate hace unos años cuando se le preguntó por qué funcionaba en Hibernate 2 pero no en Hibernate 3:
El límite era nunca una cláusula admitida en HQL. Está destinado a usar setMaxResults().
Entonces, si funcionó en Hibernate 2, parece que fue por coincidencia, más que por diseño. yo pensar esto se debía a que el analizador HQL de Hibernate 2 reemplazaba los bits de la consulta que reconocía como HQL y dejaba el resto como estaba, para que pudiera colarse algo de SQL nativo. Sin embargo, Hibernate 3 tiene un analizador AST HQL adecuado y es mucho menos indulgente.
pienso Query.setMaxResults()
realmente es tu única opción.
// SQL: SELECT * FROM table LIMIT start, maxRows;
Query q = session.createQuery("FROM table");
q.setFirstResult(start);
q.setMaxResults(maxRows);
Si no quieres usar setMaxResults()
sobre el Query
objeto, entonces siempre puede volver a usar SQL normal.
Si guardas algún titubeo o disposición de aclarar nuestro reseña puedes dejar una nota y con mucho placer lo analizaremos.