如何将存储库注入(inject)泛型类?
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 Autowiring 。
NoUniqueBeanDefinitionException:预期有单个匹配 bean,但发现 2 发生在运行时(而不是在应用程序启动时)。所以我假设在运行时所有类型都已定义并且 Spring 已经知道 T 是什么具体类型。
最佳答案
Spring 数据需要在引导时知道存储库代表的实体。这意味着您不能在 Autowiring 期间将其保留为通用参数
。
创建一个单独的界面,如下所示。
@Repository
public interface MyGenericRepository<T> extends JpaRepository<T, Integer>{
}
现在您应该能够使用明确的类型(而不是泛型类型) Autowiring 它。这很通用。
@Autowired
private MyGenericRepository<Apple, Integer> repository;
以上不能留泛型参数。
引用http://docs.spring.io/spring-data/jpa/docs/1.6.5.RELEASE/reference/html/repositories.html
还尝试使用 Long
作为 ID。
关于java - 将 JpaRepository 注入(inject) Generic 类时出现 NoUniqueBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36748960/