org.mise en veille prolongée.hql.ast.QueryTranslatorImpl liste à l'ATTENTION de: firstResult/maxResults spécifié à la collecte de l'extraction; l'application dans la mémoire

Je suis face à un problème, j'ai une requête en JPA. comme je l'ai certaines collections-je besoin pour utiliser left join fetch ou inner join fetch

Mon problème est dans l'utilisation de la setFirstResult et setMaxResult afin de ramener un nombre précis de résultat. chaque fois que je vois le résultat complet est ramener ET qu'APRÈS la maxResult est utilisé.

Est-il possible de faire la maxResult avant ?

Merci beaucoup !

ici, il est plus d'informations :

mon problème est que lorsque j'utilise :

startIndex = 0;
maxResults = 10;
query.setFirstResult(startIndex);
query.setMaxResults(maxResults);

Je vois ce message dans mon journal :

7 juin 2011 09:52:37 org.mise en veille prolongée.hql.ast.QueryTranslatorImpl liste
ATTENTION: firstResult/maxResults spécifié à la collecte de l'extraction;
l'application en mémoire!

Je vois le résultat 200 revenir (en log) et après dans le HashSet, j'ai enfin le 10 le résultat que je demande.

sa semble en mémoire est de ramener le résultat 200 et après la maxResults est appliquée dans la mémoire.

Je suis à la recherche s'il existe une façon d'être en mesure de récupérer et de limiter le nombre de résultat.

J'ai utilisé une solution de contournement, je fais une première requête pour demander l'id de ma commande , sans chercher, utilisé le maxResult.
tout fonctionne parfaitement, il est utilisé à la limite de l'instruction.
Après je utiliser mon "grand" de la requête avec le récupérer et de limiter le nombre de résultats à l'intérieur de la liste des id de ramener dans le premier.

ici c'est ma requête complète sans ma solution (notez qu'il n'y a pas de limite généré parler que par @Bozho ):

select o from Order  o
   left join fetch o.notes note
   left join fetch o.orderedBy orderedBy
   left join fetch orderedBy.address addressOrdered 
   left join fetch orderedBy.language orderedByLg 
   left join fetch orderedByLg.translations orderedByLgTtrad
   left join fetch o.deliveredTo deliveredTo 
   left join fetch deliveredTo.address addressDelivered 
   left join fetch deliveredTo.language deliveredToLg
   left join fetch deliveredToLg.translations 
   left join fetch o.finalReceiptPlace finalReceiptPlace
   left join fetch finalReceiptPlace.address addressFinalReceiptPlace 
   left join fetch finalReceiptPlace.language finalReceiptPlaceLg 
   left join fetch finalReceiptPlaceLg.translations
   inner join fetch o.deliveryRoute delivery
   left join fetch delivery.translations
   inner join fetch o.type orderType
   left join fetch orderType.translations 
   inner join fetch o.currency currency
   left join fetch currency.translations
   left join fetch o.attachments 
   left join fetch note.origin orig
   left join fetch orig.translations
   left join fetch o.supplier sup  
   left join fetch sup.department dep 
   left join fetch o.stateDetail stateD
   inner join fetch stateD.state stat  
where 1=1 and o.entryDate >= :startDat
Votre question est loin d'être clair. Pouvez-vous fournir un exemple de code de votre problème? Peut-être alors je peux comprendre la question. Je ne sais même pas ce que tu veux dire par "avant". Avant quoi?
Il peut être intéressant de savoir, ce que le SGBD sous-jacent. Oracle?
Pour info, j'ai résolu ce problème pour mes fins en se divisant en 2 requêtes... La première requête serait de générer une liste d'Id qui je serais alors en utilisant dans la seconde requête pour sélectionner les articles que j'avais besoin de Récupérer des relations.... Par exemple, j'ai choisi le Id pour la Vente de l'entité avec mon setMaxResults(int) et setFirstResult(int) et JUSTE récupéré une liste de valeurs Longues. J'ai ensuite utilisé ces valeurs comme partie de la/dans la partie de la deuxième requête et SEULEMENT utilisé le Chercher dans les relations que la deuxième requête.
Thx Deven. Votre solutuion sonne bien!

OriginalL'auteur Yannick Eurin | 2011-06-06