Java 将JpaRepository注入泛型类时的NonuniqueBeandFinitionException
如何将存储库注入泛型类Java 将JpaRepository注入泛型类时的NonuniqueBeandFinitionException,java,generics,spring-boot,autowired,Java,Generics,Spring Boot,Autowired,如何将存储库注入泛型类 public class FruitComboBox<T extends Fruit> extends ComboBox { @Autowired private JpaRepository<T, Integer> repository; ... } public class FruitMarket { @Autowired FruitComboBox<Apple> appleCombobo
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
...
}
公共类FruitComboBox扩展了ComboBox{
@自动连线
私有JPA存储库;
...
}
公营水果市场{
@自动连线
水果组合框appleCombobox;//苹果延伸水果
@自动连线
水果组合框橙色组合框;//橙色延伸水果
...
}
我还有两个存储库
@Repository
public interface AppleRepository extends JpaRepository<Apple, Integer> {
}
@Repository
public interface OrangeRepository extends JpaRepository<Orange, Integer> {
}
@存储库
公共接口AppleRepository扩展了JpaRepository{
}
@存储库
公共接口OrangeRepository扩展了JpaRepository{
}
我认为,FruitComboBox中的通用存储库应该根据它的T解析为两个现有存储库之一,并由Spring自动连接
nouniquebeandDefinitionException:预期为单个匹配bean,但发现2个在运行时发生(不是在应用程序启动时)。所以我假设在运行时所有类型都已定义,Spring已经知道T的具体类型。Spring数据需要在引导时知道存储库所代表的实体。这意味着您不能在自动布线期间将其保留为
通用参数
创建一个单独的界面,如下所示
@Repository
public interface MyGenericRepository<T> extends JpaRepository<T, Integer>{
}
@存储库
公共接口MyGenericRepository扩展了JpaRepository{
}
现在,您应该能够使用特定类型(而不是泛型类型)自动关联它。这是通用的
@Autowired
private MyGenericRepository<Apple, Integer> repository;
@Autowired
私人MyGenericRepository
还可以尝试对ID使用Long
。谢谢,但我研究了自动连接实际存在的存储库的可能性。我给出了一个更精确的定义,请看问题,在这方面有什么进展吗?我有一个类似的问题,对我来说,这听起来像一个错误!