Bonjour à tous,
j'ai une application dans laquelle je récupère une collection d'objet en fonction de certain critère définit.
Mon problème, c'est que le nombre de résultat de la requête est trop important (~300 000 objets) et provoque un java.lang.OutOfMemoryError.
Je précise que j'ai déjà étendu la mémoire allouer à Java (1Go, je ne peux mettre +), et que je suis en lazyload.
Comme il s'agit essentiellement de traitement dans des batch, j'avais pour certain contourné le problème en modifiant mes requêtes et mon code pour ne retourner que N résultat, et avec une boucle pour faire une nouvelle requête pour les N suivant (etc.) en faisait un commit à chaque itération de cette boucle.
Si ça marche, la solution n'est pas bien élégante à mon gout, et nécessite pas mal de changement (réécriture des requêtes).
J'aimerai savoir s'il y a un mécanisme d'Hibernate qui permettrait de charger les résultat petit à petit pour éviter d'exploser la mémoire avec l'instanciation de tous les objets d'un coup ?
Si ça existe, je n'ai rien trouvé
Merci
Partager