2010-08-13 4 views

Antwort

59

Sie können versuchen wie folgt geben 10 Ergebnisse explizit abgerufen werden.

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

Es wird automatisch nativen Abfrage in Backend erstellen, um bestimmte Anzahl der Ergebnisse abgerufen werden, wenn das Backend unterstützt, und sonst die Grenze im Speicher tun, nachdem alle Ergebnisse zu bekommen.

+4

„Es wird automatisch nativen Abfrage in Back-End erstellen, um bestimmte Anzahl der Ergebnisse abrufen“ - nur, wenn die Datenbank und der Dialekt unterstützt wird. Wenn nicht, fragt JPA alle Ergebnisse ab und filtert sie im Speicher. Der Entwickler muss sich dessen bewusst sein, da dies die Leistung stark beeinträchtigen kann. Bei einigen (komplizierteren) Abfragen versucht JPA nicht einmal, die LIMIT/TOP-Funktionalität zu verwenden, wenn dies zu falschen Ergebnissen führt. –

+1

10 @AdamDyga Ja, es ist implementierungsspezifisch, einige bieten sie explizit an. Danke für das Hinzufügen von Informationen. –

19

Sie können einen Offset zu verwenden setFirstResult() gesetzt

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