2010-08-13 8 views

Répondre

59

Vous pouvez essayer comme ceci donnant 10 résultats pour être cherché explicitement.

entityManager.createQuery(JPQL_QUERY) 
      .setParameter(arg0, arg1) 
      .setMaxResults(10) 
      .getResultList(); 

Il crée automatiquement la requête native en back-end pour récupérer nombre précis de résultats, si le backend supporte, et par ailleurs faire la limite en mémoire après avoir obtenu tous les résultats.

+4

« Il crée automatiquement la requête native de back-end pour récupérer certain nombre de résultats » - que si la base de données et le dialecte supporte. Sinon, JPA interrogera tous les résultats et les filtrera en mémoire. Le développeur doit être conscient de cela, car cela peut affecter beaucoup la performance. De plus, avec certaines requêtes (plus compliquées), JPA n'essaie même pas d'utiliser la fonctionnalité LIMIT/TOP, par exemple quand cela conduirait à de mauvais résultats. –

+1

@AdamDyga Oui, c'est une implémentation spécifique, certains les fournissent explicitement. Merci d'avoir ajouté des informations. –

19

Vous pouvez définir un décalage trop en utilisant setFirstResult()

em.createNamedQuery("Entity.list") 
     .setFirstResult(startPosition) 
     .setMaxResults(length); 
Questions connexes