如何将存储库注入泛型类?
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 :(得分: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。