2011-01-19 46 views

Respuesta

41

Actualización: Spring 3.1 admitirá persistence.xml -sin configuración de JPA, consulte Spring 3.1 M2: Configuration Enhancements.


La respuesta de darioo es buena para el uso práctico, pero no es técnicamente correcta.

PersistenceProvider tiene dos métodos de fábrica:

  • EntityManagerFactory createEntityManagerFactory(String emName, Map map) - para entornos autónomos, persistence.xml es que ser analizado por el proveedor de persistencia.

  • EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) - para entornos de servidores de aplicaciones, persistence.xml fue analizado por el servidor de aplicaciones y su contenido se pasa como PersistenceUnitInfo.

Spring LocalContainerEntityManagerFactoryBean emula el entorno del servidor de aplicaciones. Por lo tanto, analiza persistence.xml, fusiona su contenido con los valores del contexto de la aplicación y lo pasa al proveedor de persistencia utilizando el segundo método de fábrica.

Sin embargo, el proceso de obtención de datos persistence.xml es configurable:

  • puede configurar el nombre de archivo usando persistence.xmlpersistenceXmlLocation propiedad - es útil para evitar conflictos con las estrategias de la APP de inicialización por defecto de servidores de aplicaciones.

  • Puede anular completamente la fuente de PersistenceUnitInfo configurando una estrategia personalizada PersistenceUnitManager.

Por lo tanto, en realidad se puede configurar la APP en la primavera sin persistence.xml escribiendo una costumbre PersistenceUnitManager, a través de un gestor de este tipo no está disponible fuera de la caja.

+1

Una muy buena respuesta, te votaría si no hubiera agotado todos los votos de este día. Supuse que OP no se molestaría en desenterrar dentro de Spring, ya que parece innecesario y algo complejo. – darioo

+0

Gracias por la respuesta +1 por toda la explicación – user373201

7

persistence.xml es necesario cuando está utilizando Hibernate a través de JPA, aunque está utilizando Spring JPA. Si está utilizando Hibernate directamente, entonces no es necesario persistence.xml.

+1

¿Por qué Spring JPA con Hibernate como proveedor JPA necesita el archivo persistence.xml? – Suvasis

1

La especificación JPA no indica en ningún lugar que se requiere el archivo, pero en las definiciones de los contratos de EntityManagerFactory y EntityManager y prácticamente en toda la especificación, el archivo persistence.xml se menciona una y otra vez.

Recientemente tuve que lidiar con la cuestión de si es posible configurar programáticamente JPA 2.0 con Hibernate 3.6 sin usar persistence.xml en absoluto.

Llegué a la conclusión de que esto no es posible, aunque puede configurar el archivo para que contenga una configuración mínima. Determiné que el archivo debe contener al menos el nombre de su unidad de persistencia. El resto de la información se puede proporcionar programáticamente a la fábrica del administrador de entidades como parámetros.

Nunca he usado la primavera, por lo tanto, no sé si utiliza algún truco para solucionar este problema.

Cuestiones relacionadas