2016-04-20 5 views
3

Как внедрить репозиторий в общий класс?NoUniqueBeanDefinitionException при введении JpaRepository в класс Generic

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 и autowired к весне.

NoUniqueBeanDefinitionException: ожидаемый единичный бит, но найден 2 происходит во время выполнения (не в начале приложения). Поэтому я предположил, что во время выполнения все типы определены, а Spring знает, какой конкретный тип T.

+0

Прогресс на этом? У меня есть аналогичная проблема, и для меня это звучит как ошибка! – Robin

ответ

0

Весенние данные должны знать в момент начальной загрузки объект, представляющий репозиторий. Это означает, что вы не можете оставить его с помощью 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 для идентификаторов.

+0

Спасибо, но я исследую возможности для автопостановки существующего хранилища. Я дал более точное определение, см. Вопрос –

Смежные вопросы