2014-08-29 11 views
14

Nel nostro codice abbiamo un numero di repository JPA di Spring, uno per ciascuna delle nostre classi di modelli. Essi sono definiti come (dove <Name> è il nome della nostra classe modale):IntelliJ "Impossibile eseguire l'autowire." ispezione, "[...] più di un bean" per i repository JPA di Spring

@Repository 
public interface <Name>Repository implements JpaRepository<Name, Long> { 
    // … 
} 

Noi li inietta nei nostri fagioli utilizzando il @Inject annotazione dal javax:

@Inject 
public void set<Name>Repository(<Name>Repository <name>Repo) { 
    this.<name>Repo = <name>Repo; 
} 

private <Name>Repository <name>Repo; 

Il problema è che IntelliJ sottolinea la <name>Repo nella funzione set<Name>Repository come un errore con il testo:

Impossibile autowire. Vi è più di un bean di tipo "Repository". Fagioli: Repo, Repo.

Questo è solo un problema con l'ispezione. La compilazione e l'esecuzione della nostra app funzionano bene, ma nello sforzo di rendere utilizzabili le ispezioni in IJ questo è un grosso problema. Qualcuno ha suggerimenti su come convincere IntelliJ a comportarsi?

Per riferimento, stiamo utilizzando Hibernate come provider JPA e l'origine dati è configurata nelle finestre degli strumenti Database e Persistenza.

+0

IntelliJ vi dice quali bean ritiene che corrispondano all'iniezione? – geoand

+1

Anche su una nota diversa, non è necessario l'annotazione '@ Repository'. Spring Data JPA creerà il bean automaticamente se è configurato correttamente – geoand

+0

Sì, @geo, i bean corrispondenti sono ' Repo' e' Repo'. Non il più utile. L'unica cosa che ho potuto pensare è che IJ ha raccolto sia l'annotazione '@ Repository', sia la configurazione di primavera? –

risposta

12

Anch'io ho lo stesso problema. Ho appena commentato l'annotazione @Repository sui miei repository JPA di Spring Data e tutto funziona perfettamente e IntelliJ IDEA è anche felice!

+1

Si scopre che era più o meno quello che stava succedendo. Abbiamo utilizzato le annotazioni '@ Repository' insieme a una configurazione basata su Java che ha anche inizializzato manualmente tutti i nostri repository, quindi IJ ha pensato che esistessero due bean identici. Tuttavia, poiché non abbiamo configurato Spring per cercare l'annotazione '@ Repository', ma ha utilizzato la configurazione manuale solo durante l'esecuzione dell'app, non causava problemi. La rimozione dell'annotazione '@ Repository' ha fatto il trucco ed è corretta poiché non la usavamo. –

+0

Un problema che ho è che se uso Spring Boot, attualmente IntelliJ v 15 si lamenta erroneamente che non può autorizzare nessuno dei repository Spring Data (come CrudRepository), quindi aggiungendo @Repository risolve questo problema. Tuttavia, questo causa un errore se non usi Spring Boot (ho un progetto con una libreria Dao condivisa usando un'app di molla standard e un avvio primaverile!), Che correzioni ne interrompe un altro). Tuttavia non vi sono errori di runtime e tutto funziona come previsto – ismoore999

2

venuto fuori ho avuto 2 contesti che sono state raccogliendo le stesse classi due volte nella mia primavera applicationContext.xml:

<mongo:repositories base-package="com.example.persistence.repositories.*"/> 
... 
<context:component-scan base-package="com.example.persistence.repositories.*"/> 

Rimozione una di queste linee risolto il problema.

Problemi correlati