unitname persistencecontext example ejemplo curso java jpa entitymanager

java - persistencecontext - jpa



¿Con qué frecuencia debería crear un EntityManager? (3)

Tengo una EntityManagerFactory para la cual puedo crear una (o varias) instancias de EntityManager . Estoy usando un entorno Servlet y tengo una EntityManagerFactory conectada al servlet (a través del contexto de servlet) que se comparte durante la vida útil del servlet (y, por lo tanto, para todos los usuarios).

Puedo hacer uno de los siguientes:

  • Crear un EntityManager único para la vida útil de mi servlet (por ejemplo, compartido entre todos los usuarios)
  • Crea uno por usuario (para que cada usuario tenga el suyo en HttpSession)
  • Cree uno por solicitud HTTP (por ejemplo, instanciando uno nuevo y cerrándolo al final de un método doGet )

¿Cuál es el más apropiado? ¿Es significativo el costo de crear un EntityManager? Si hago un único EntityManager compartido, ¿hay un único alcance de transacción (es decir, las actualizaciones entre usuarios independientes podrían comprometer otros cambios)?


Sí, estoy de acuerdo con NimChimpsky y Qwerky en el uso de EJB3.x al acceder a bases de datos y utilizar un EM por unidad de trabajo.


Un EM para todo el servlet no suena bien. Si no está utilizando EM administrados por contenedor (por ejemplo, EJB3), la recomendación es usar un EM para una unidad de trabajo particular .

En un contexto de aplicación web, su tercera sugerencia (una por solicitud HTTP) suena bien. Sin embargo, esto puede llevarlo a un error en el que está atando su capa de servicio con su capa de DB (su capa de servicio ni siquiera debe conocer la existencia de un EM).

Otro enfoque sería marcar de forma programática las transacciones en su DAO y hacer que su DAO use un nuevo EM para cada llamada a un método.

Editar: Los ME son baratos de crear en oposición a los CEM que tienen una sobrecarga significativa . Usar un EMF (que parece que sí) y muchos EMs es el camino a seguir.


hacemos un administrador de entidad inyectado para cada slsb , y el slsb mismo se accede a través de un delegado, de los cuales hay uno por sesión, que busca la interfaz local / remota. Usando ejb3.0.