Question

Je suis nouveau à JPA / OpenJPA et j'ai remarqué que si je ne l'appelle pas EntityManager.clear() après que je persiste entités je reçois un OutOfMemoryError (je continue d'ajouter de nouvelles entités dans une boucle). Je ne sais pas si cela est le comportement attendu ou il est juste et OpenJPA de pépin 1.2.1.

Alors, dois-je détacher explicitement les entités moi-même? Si je ne suis pas, il est une bonne pratique de toute façon?

Était-ce utile?

La solution

Je n'ai pas beaucoup d'expérience avec JPA. Toutefois, ce sera utile -
JPA vous devez soit:
- Créer une nouvelle EntityManager pour chaque transaction
. - Appel clair () après chaque transaction pour effacer le contexte de persistance

.

Autres conseils

Cela dépend combien d'objets vous ramènerai dans le processus de persistance (lire). Si vous gérez un grand nombre (ou certains des objets sont grandes) alors l'utilisation de clair () peut donner un sens. Chaque fois qu'un objet est lu doit être mis dans le cache L1 par l'Assemblée parlementaire paritaire impl.

On dirait qu'il ya quelque chose qui cloche quelque part, dans votre conception. Habituellement, l'entité se détache une fois qu'il est en dehors du champ d'application de gestionnaire d'entités. Et c'est l'une des raisons vous ne pouvez pas les relations de charge paresseux, en dehors du champ d'application.

En ce qui concerne mon expérience concerne, je rarement utilisé em.clear (), si jamais. Je Hibernate la mise en œuvre, et Essentials Toplink. Aucune expérience avec OpenJPA, encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top