org - javax persistence persistenceexception no persistence provider for entitymanager named persistencia
¿Cuándo necesitamos más de un EntityManager? (1)
Estoy aprendiendo JPA y tengo una pregunta:
¿En qué situaciones necesitamos más de un EntityManager
en nuestra aplicación?
Las dos situaciones que conozco son las siguientes:
Cuando nuestra aplicación es una aplicación de múltiples subprocesos y más de un subproceso necesita una transacción JPA porque
EntityManager
no es seguro para subprocesos y necesitamos unEntityManager
por subproceso.Cuando cualquiera de los hilos necesita múltiples transacciones simultáneas, necesitamos más de un
EntityManager
en ese hilo porque existe una relación de uno a uno entreEntityManager
yEntityTransaction
.
Q1. ¿Hay otras situaciones en las que necesitamos más de un EntityManager
?
Q2. A mi entender, solo debe haber un EntityManagerFactory
por Unidad de Persitencia. ¿Estoy en lo correcto? Si no, ¿cuáles son esas situaciones en las que necesitamos múltiples EntityManagerFactory
por unidad de persistencia?
P1: El EntityManager
es mejor compararlo con la "buena vieja" Session
hibernación: una unidad de trabajo (una simple acción comercial, por ejemplo, "iniciar sesión en un usuario", "realizar un pedido", etc.). No está necesariamente atado a un solo hilo. Solo se ejecutará en problemas si los diferentes subprocesos ejecutan tareas de base de datos que dependen entre sí dentro de una sola unidad de trabajo. Tendría que ejecutarlos en sincronización (preferiblemente, en orden en un solo hilo). Si, por ejemplo, tiene el requisito comercial de limpiar algunos "registros antiguos" cuando un usuario inicia sesión (lo que razonablemente no se molesta en la información del otro), puede ejecutarlo perfectamente en dos hilos separados dentro de una sola unidad de trabajo.
P2: Su comprensión es correcta. Sin embargo, puede crear más de uno, pero eso no tendría ningún sentido ni tendría ningún beneficio. Sólo añadiría una sobrecarga significativa.