2012-07-25 12 views
41

Estoy usando JPA 2. Por razones de seguridad, estoy trabajando de forma segura con CriteriaQuery (y por lo tanto, no estoy buscando soluciones de consultas tipeadas, etc.). Recientemente me he encontrado con un problema en el que necesito establecer un SQL-LIMIT.JPA 2 CriteriaQuery, usando un límite

Después de mucha búsqueda, todavía no he tenido éxito en encontrar una solución.

CriteriaQuery<Product> query = getEntityManager().getCriteriaBuilder().createQuery(Product.class); 
Root<Product> product = query.from(Product.class); 
query.select(product); 

return em.createQuery(query).getResultList(); 

¿Alguien me puede ayudar?

Respuesta

100

Definir limit y offset en el Query:

return em.createQuery(query) 
     .setFirstResult(offset) // offset 
     .setMaxResults(limit) // limit 
     .getResultList(); 

De la documentación:

TypedQuery setFirstResult (int startPosición)

establecer la posición del primer resultado para recuperar. Parámetros: StartPosition - posición del primer resultado, numeradas de 0

setMaxResults TypedQuery (int maxResult)

establecer el número máximo de los resultados de recuperar.

+0

Esto no soluciona la pregunta original de cómo hacer esto con javax.persistence.criteria.CriteriaQuery. La solución aceptada usa la función createCriteria() ahora en desuso. –

Cuestiones relacionadas