Estamos desarrollando una aplicación web con Spring, Hibernate y Maven de una forma muy modular. Hay proyectos centrales que definen el acceso a los datos y ver cosas específicas, luego hay módulos que definen la lógica y las entidades (@Entity
) y luego está la aplicación web que define el controlador y la vista.JPA - múltiples jarros que definen objetos de @Entity
Ahora tenemos un módulo de seguridad que define entidades de seguridad como la cuenta y el rol, y tenemos un módulo prototipo que define algunas entidades de ejemplo, como cliente y pedido. Ambos tienen un PersistenceUnit
definido dentro de un persistence.xml
que está prácticamente vacío excepto por el nombre de PersistenceUnit, ya que toda la configuración de la base de datos se realiza en la aplicación web con un datasource.xml. Se supone que la aplicación web carga ambas jarras como dependencias maven.
Ambos proyectos construirán bien, autocifrarán todas las entidades y las crearán para sus respectivas pruebas unitarias. También se cargarán correctamente dentro de la aplicación web si se agregan individualmente.
Sin embargo, tan pronto como ambos se carguen al mismo tiempo, el segundo anulará el PersistenceUnit
del primero y creará así un IllegalArgumentException : Not an entity
para todas las entidades del primero. Si ambos proyectos tienen una unidad de persistencia diferente, la carga de la aplicación web arrojará otra excepción diciendo que no single default persistence unit
se definió.
Así que .. ¿cómo puedo obtener todas las clases @Entity
anotados para cargar en mi aplicación web sin tener que definir todos ellos dentro de la persistence.xml
(como here), sino más bien a través de los componentes de análisis? This parece una idea, aunque no sé cómo usarla y probarla ...
Creo que debemos fusionar todas las unidades de persistencia dentro de la aplicación web o cargar todas las entidades mediante programación. Definirlos con código fijo dentro de persistence.xml no es una opción para nosotros.
en relación con la primera respuesta: Por lo que yo sé , Spring ya escanea para las clases anotadas y las agrega a la 'PersistenceUnit'. El problema es que tengo que nombrar todas las 'PersistenceUnits' de la misma manera, lo que hará que se anulen entre sí. Así que estoy buscando una manera de combinar todas las PersistenceUnits en una en mi aplicación web. No sé si [esto] [1] (abajo) haría, aunque no tengo idea de dónde registrar un 'MergingPersistenceUnitPostProcessor' [1]: http://forum.springsource.org/showthread.php? 61763-Problems-with-JPA-and-multiple-persistence-units – Pete