2016-04-20 21 views
3

如何將存儲庫注入泛型類?將JpaRepository注入到泛型類時出現NoUniqueBeanDefinitionException

public class FruitComboBox<T extends Fruit> extends ComboBox { 

    @Autowired 
    private JpaRepository<T, Integer> repository; 
    ... 
} 

public class FruitMarket { 

    @Autowired 
    FruitComboBox<Apple> appleCombobox; // Apple extends Fruit 

    @Autowired 
    FruitComboBox<Orange> orangeCombobox; // Orange extends Fruit 

    ... 
} 

而且我有兩個倉庫

@Repository 
public interface AppleRepository extends JpaRepository<Apple, Integer> { 
} 

@Repository 
public interface OrangeRepository extends JpaRepository<Orange, Integer> { 
} 

我想,從FruitComboBox通用倉庫應作爲兩個現有資源庫之一,根據它的T爲解決,由Spring自動裝配。

NoUniqueBeanDefinitionException:期望的單個匹配的bean,但發現2發生在運行時(不在應用程序的開始處)。所以我認爲在運行時所有類型都是定義的,Spring已經知道具體類型是T.

+0

這方面的進展如何?我有類似的問題,對我來說,這聽起來像一個錯誤! – Robin

回答

0

Spring數據需要在引導時知道存儲庫代表的實體。這意味着在自動裝配過程中,您不能將其與Generic Parameter放在一起。

創建一個單獨的界面,如下所示。

@Repository 
public interface MyGenericRepository<T> extends JpaRepository<T, Integer>{ 

} 

現在你應該可以使用確定類型(不是泛型類型)自動裝配它。這是通用的,因爲它得到。

@Autowired 
private MyGenericRepository<Apple, Integer> repository; 

上面不能留有泛型參數。

參考http://docs.spring.io/spring-data/jpa/docs/1.6.5.RELEASE/reference/html/repositories.html

也嘗試使用Long爲ID的。

+0

謝謝,但我調查了實際存在的存儲庫自動裝配的可能性。我給出了一個更精確的定義,請看這個問題 –