2014-08-29 13 views
14

W naszym kodzie mamy kilka repozytoriów Spring JPA, po jednym dla każdej z naszych klas modeli. Są one zdefiniowane jako (gdzie <Name> to nazwa naszej modalnej klasie):IntelliJ "Nie można zaprogramować." inspekcja "[...] więcej niż jeden komponent bean" dla repozytoriów Spring JPA

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

Mamy wstrzyknąć je w naszych ziaren z wykorzystaniem @Inject adnotacji z javax:

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

private <Name>Repository <name>Repo; 

Problem jest, że IntelliJ podkreśla <name>Repo w funkcji set<Name>Repository jako błąd z tekstem:

Nie można zaprogramować. Istnieje więcej niż jedna fasola typu "Repozytorium". Fasola: Repo, Repo.

To tylko problem z inspekcją. Kompilacja i uruchamianie naszej aplikacji działa dobrze, ale staramy się, aby inspekcje w IJ były użyteczne, to duży problem. Ktoś ma sugestie, jak uzyskać zachowanie IntelliJ?

Dla odniesienia używamy Hibernate jako naszego dostawcy JPA, a źródło danych jest skonfigurowane w oknach narzędzi Database and Persistence.

+0

Czy urządzenie IntelliJ powie Ci, które ziarna odpowiadają wstrzyknięciom? – geoand

+1

Również w innej notatce nie potrzebujesz adnotacji '@ Repository'. Spring Data JPA utworzy komponent bean automatycznie, jeśli jest poprawnie skonfigurowany. – geoand

+0

Tak, @geoand, odpowiadające im fasole to ' Repo' i' Repo'. Niezbyt pomocny. Jedyne co mogłem wymyślić to to, że IJ podniósł zarówno adnotację '@ Repository', jak i konfigurację wiosenną? –

Odpowiedz

12

Ja też mam ten sam problem. Właśnie skomentowałem adnotację @Repository na moich repozytoriach Spring Data JPA i wszystko działa poprawnie, a IntelliJ IDEA jest również szczęśliwy!

+1

Okazało się, że to było właśnie to, co się działo. Użyliśmy adnotacji '@ Repository' wraz z konfiguracją opartą na Javie, która również ręcznie zainicjowała wszystkie nasze repozytoria, stąd IJ pomyślał, że są dwa identyczne komponenty. Jednakże, ponieważ nie skonfigurowaliśmy Springa do sprawdzania adnotacji '@ Repository', ale używaliśmy tylko ręcznej konfiguracji podczas uruchamiania aplikacji, nie powodowało to problemów. Usunięcie adnotacji '@ Repository' zrobiło podstęp i jest poprawne, ponieważ jej nie używaliśmy. –

+0

Mam jeden problem, jeśli używam Spring Boot, obecnie IntelliJ v 15 narzeka niepoprawnie, że nie może automatycznie wyposażyć żadnego z repozytoriów Spring Data (takich jak CrudRepository), dlatego dodanie @Repository naprawia to. Jednak powoduje to błąd, jeśli nie używasz Spring Boot (mam projekt ze współużytkowaną biblioteką Dao przy użyciu standardowej aplikacji źródłowej i rozruchu sprężyny! - co naprawia jeden zepsuty inny) .Jednak nie ma błędu runtime i wszystkie działa zgodnie z oczekiwaniami – ismoore999

2

Okazuje się, że miałem 2 konteksty, które zbierając te same zajęcia dwa razy w moim wiosną applicationContext.xml:

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

Usuwanie jednej z tych linii naprawili problem.

Powiązane problemy