2011-01-19 10 views

risposta

41

Aggiornamento: Spring 3.1 supporterà la configurazione JPA persistence.xml -free, vedere Spring 3.1 M2: Configuration Enhancements.


La risposta di darioo è buona per l'uso pratico, ma non tecnicamente corretta.

PersistenceProvider ha due metodi di fabbrica:

  • EntityManagerFactory createEntityManagerFactory(String emName, Map map) - per ambienti autonomi, persistence.xml deve essere analizzato dal provider di persistenza.

  • EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map) - per gli ambienti server applicativi, persistence.xml è stato analizzato dal server di applicazione e il suo contenuto viene passato come PersistenceUnitInfo.

Spring LocalContainerEntityManagerFactoryBean emula l'ambiente del server delle applicazioni. Pertanto analizza lo stesso persistence.xml, unisce i suoi contenuti con i valori del contesto dell'applicazione e lo passa al provider di persistenza utilizzando il secondo metodo di fabbrica.

Tuttavia, processo di ottenimento dei dati persistence.xml è configurabile:

  • È possibile configurare il nome del file usando persistence.xmlpersistenceXmlLocation proprietà - è utile per evitare conflitti con le strategie di inizializzazione APP di default dei server applicativi.

  • È possibile ignorare completamente la sorgente di PersistenceUnitInfo impostando una strategia personalizzata PersistenceUnitManager.

Quindi, in realtà è possibile configurare JPA in primavera senza persistence.xml scrivendo una consuetudine PersistenceUnitManager, anche se un tale manager non è disponibile out of the box.

+1

Una buona risposta, ti voterei se non avessi esaurito tutti i voti per questo giorno. Supponevo che OP non si sarebbe preoccupato di scavare all'interno di Spring, poiché sembra inutile e alquanto complesso. – darioo

+0

Grazie per la risposta +1 per tutte le spiegazioni – user373201

7

persistence.xml è necessario quando si utilizza l'ibernazione tramite JPA, anche se si utilizza Spring JPA. Se stai utilizzando Hibernate direttamente, non è necessario persistence.xml.

+1

Perché Spring JPA con Hibernate come provider JPA necessita del file persistence.xml? – Suvasis

1

Le specifiche JPA non indicano in alcun modo che il file è richiesto, ma nelle definizioni dei contratti di EntityManagerFactory e EntityManager e praticamente nell'intera specifica, il file persistence.xml viene citato più e più volte.

Recentemente ho dovuto affrontare la questione se sia possibile configurare in modo programmatico JPA 2.0 con Hibernate 3.6 senza usare persistence.xml.

Ho concluso che questo non è possibile, sebbene sia possibile configurare il file in modo che contenga una configurazione minima. Ho determinato che il file deve contenere almeno il nome della tua unità di persistenza. Il resto delle informazioni può essere programmato in modo programmato per la fabbrica del gestore di entità come parametri.

Non ho mai usato la primavera però, quindi non so se usa trucchi per superare questo problema.

Problemi correlati