jpa - una - ¿Cómo puedo fusionar/extender unidades de persistencia desde diferentes JAR?
jpa ejemplos (2)
Utilizo la persistencia JPA para mis modelos de datos con Eclipselink como proveedor de persistencia. Tengo una aplicación modular (OSGi) y uno de los módulos contiene el modelo de datos estándar y una unidad de persistencia que incluye automáticamente todas las entidades del paquete. El proveedor de persistencia está en otro módulo, que funciona bien.
Ahora quiero un tercer módulo para agregar algunas entidades a la unidad de persistencia. ¿Cómo puedo hacer eso? Encontré esta solución , que parece específica de Spring, que no estoy usando. El resumen de ese enfoque consiste en escribir un postprocesador que se enganche en el procesamiento de la unidad de persistencia y fusiona manualmente <class>
entradas de <class>
de los archivos persistence.xml
.
¿Es posible fusionar unidades de persistencia? ¿Alguien puede sugerir una solución alternativa?
En primer lugar, aquí hay un enlace en Dynamic-JPA que ofrece una forma de actualizar las entidades de forma dinámica. Exploraría esta opción primero.
Aquí hay otro enlace ( PDF ) de OSGi. Hay algunos diagramas de nivel superior que tratan sobre la persistencia y EntityManagerFactory que pueden ser útiles. un enfoque interesante pero puede no estar relacionadoAquí hay un enlace sobre la creación programática de unidades de persistencia sin usar un archivo persistence.xml (que realmente no se puede hacer, pero las respuestas ofrecen alguna información sobre el problema). philk ofrece una sugerencia sobre cómo eliminar el proveedor del archivo persistence.xml. Si sigue este método, puede combinar sus entidades en una unidad de persistencia específica.
"Bueno, en los viejos tiempos de Hibernate solo podía crear una sesión y agregar mis clases sobre la marcha. Parece que nunca llegó a las especificaciones SUN de JPA. Sin embargo, he eliminado por completo el proveedor de persistence.xml y se lo entrego. a EL usando las propiedades de la EMF. Esto parece funcionar bien. Lo único que queda en persistence.xml es la especificación de las clases. Supongo que no sería demasiado difícil exponer el método que analiza el nombre de clase en EL y crea el ClassDescriptor para ello como un método público del Proveedor EL JPA ".
Finalmente, llegamos a la solución hackish, ya se ha sugerido hacerlo, simplemente edite sus archivos persistence.xml después del hecho. Creo que esto funcionaría (aunque no lo he intentado) pero definitivamente es una opción.
Tengo una configuración donde un archivo WAR contiene el archivo persistence.xml. La solución ya descrita aquí debería ser utilizable para JAR, WAR y EAR. JPA 2.0: Agregar clases de entidad a PersistenceUnit * desde diferentes jar * automáticamente