- Est-ce une application Java EE ou Java SE?
- Comment gérez-vous votre entité manager?
Le gestionnaire d'entités est généralement associé à un contexte. Au cours d'une transaction, chaque entité que vous récupérez va y être placée, et ce sera un cache pour toutes les entités, lorsque la transaction sera validée, JPA recherchera les modifications dans le contexte et validera les modifications dans la base de données. Ceci implique que si vous récupérez 1 million de lignes, vous aurez 1 million d'entités dans votre contexte, et elles ne seront pas récupérables avant la fermeture de votre gestionnaire d'entités.
Puisque vous faites référence à une JTable, je ne peux que supposer qu'il s'agit d'une application JSE. Dans ce type d'application, vous maîtrisez totalement le contexte. Dans ce type d'application, il existe une relation un-à-un entre le contexte et le gestionnaire d'entités (ce qui n'est pas toujours le cas dans l'environnement Java EE). Cela implique que vous pouvez créer un gestionnaire d'entités par requête (transaction ou conversation) ou un gestionnaire d'entité pour toute la durée de vie de l'application. Si vous utilisez la seconde approche, votre contexte n'est jamais récupéré, et plus vous lisez d'objets de la base de données, plus grand devient, jusqu'à ce que vous puissiez éventuellement atteindre un problème de mémoire comme celui que vous décrivez. Je ne dis pas que c'est la cause de votre problème, mais il pourrait certainement être un bon moyen de trouver la cause profonde, ne pensez-vous pas?
Quelqu'un a cliqué sur "suivant" 2500 fois? –