Stiamo sviluppando un'applicazione Web con Spring, Hibernate e Maven in modo molto modulare. Esistono progetti chiave che definiscono l'accesso ai dati e visualizzano specifiche cose, quindi ci sono moduli che definiscono la logica e le entità (@Entity
) e poi c'è l'app Web che definisce controller e vista.JPA - più jar che definiscono gli oggetti @Entity
Ora abbiamo un modulo di protezione che definisce entità di sicurezza come account e ruolo e abbiamo un modulo prototipo che definisce alcune entità di esempio come cliente e ordine. Entrambi hanno un valore PersistenceUnit
definito all'interno di uno persistence.xml
che è praticamente vuoto eccetto il nome PersistenceUnit, poiché tutta la configurazione del database viene eseguita nell'app Web con un datasource.xml. Si suppone che l'app Web carichi entrambi i jar come dipendenze Maven.
Entrambi i progetti si costruiranno bene, analizzeranno automaticamente tutte le entità e le creeranno per i rispettivi test unitari. Verranno anche caricati all'interno dell'app Web con successo se aggiunti singolarmente.
Tuttavia, non appena vengono caricati entrambi allo stesso tempo, il secondo sostituisce lo PersistenceUnit
del primo e quindi crea uno per tutte le entità dal primo. Se entrambi i progetti hanno un'unità di persistenza diversa, il caricamento dell'applicazione Web genera un'altra eccezione che indica che è stato definito no single default persistence unit
.
Quindi .. come posso ottenere tutte le classi annotate @Entity
per caricare nella mia web app senza dover definire tutti all'interno del persistence.xml
(come here), ma piuttosto tramite componente di scansione? This sembra come un'idea, anche se non so come usarlo e testarlo ...
Penso che sia dobbiamo unire tutti PersistenceUnits dentro l'applicazione web o caricare tutte le Entità a livello di codice. Definirli hard-coded all'interno di persistence.xml non è un'opzione per noi.
relativa alla prima risposta: Per quanto ne so , Spring esegue già la scansione delle classi annotate e le aggiunge a PersistenceUnit'. Il problema è che devo nominare tutte le "PersistenceUnits" le stesse che risulteranno sovrascritte l'una dall'altra. Quindi sono alla ricerca di un modo per unire tutti PersistenceUnits in uno nella mia web app. Non so se [questo] [1] (in basso) farebbe, anche se non ho idea di dove registrare un 'MergingPersistenceUnitPostProcessor' [1]: http://forum.springsource.org/showthread.php? 61763-Problemi-con-JPA-e-multiple-persistenza-unità – Pete