2010-02-11 10 views

Respuesta

6

No tengo mucha experiencia con JPA. Sin embargo, esto será útil:
En JPA debe:
- Crear un nuevo EntityManager para cada transacción.
- Call clear() después de cada transacción para borrar el contexto de persistencia.

+0

Gracias. De acuerdo, con las pistas en las respuestas, descubrí que se supone que no debo usar solo un EntityManager duradero en la aplicación. Debo usar el alcance del método o el alcance de la solicitud [1]. Eso eliminaría la necesidad de llamar a em.clear(). ¡Gracias! [1] http://javanotepad.blogspot.com/2007/08/managing-jpa-entitymanager-lifecycle.html – ecerulm

+0

Enlace de interés. Había usado JPA con Dependency Injection (usando Seam), por lo que no había tenido problemas similares. – Padmarag

5

Depende de cuántos objetos ingresa al proceso de persistencia (leer). Si maneja números grandes (o algunos de los objetos son grandes), entonces el uso de borrar() puede tener sentido. Cada vez que se lee un objeto, debe colocarlo en la memoria caché L1 mediante el JPA impl.

3

Parece que hay algo mal en alguna parte, en su diseño. Por lo general, la entidad se separa una vez que está fuera del alcance del administrador de la entidad. Y esa es una de las razones por las que no se pueden relajar las relaciones de carga, fuera del alcance.

En lo que respecta a mi experiencia, rara vez uso em.clear(), si es que alguna vez. Usé la implementación de Hibernate y Toplink Essentials. Sin experiencia con OpenJPA, aún.

+0

cuando dice que la entidad se desprende de una está fuera del alcance del administrador de entidades ¿quiere decir que debería cerrar EntityManager y crear una nueva para cada transacción como sugiere Padmarag? – ecerulm

Cuestiones relacionadas