Правильное наследование в весенних хранилищах данных - PullRequest
0 голосов
/ 14 декабря 2018

Я должен реализовать пользовательский класс репозитория, аннотированный @Repository, который должен наследовать другой класс, также аннотированный @Repository.

Какова правильная реализация этого варианта использования?Можно напрямую унаследовать этот класс и добавить @Repository к основному, или есть другая лучшая практика?На самом деле у меня проблема, когда я определил

 @EnableJpaRepositories(basePackages = { "com.example.foo.repositories", "com.example.bar.repositories" }

в классе @Configuration в корневом каталоге, он не сканирует мои репозитории и не может выполнить автоматическое подключение.

вот пример моего класса репозитория:

родительский репозиторий (сторонний класс):

@Repository
public abstract class ParentRepository {
  // ...
}

интерфейс и класс impl, которые находятся в пакете com.example.foo.repositories:

public interface IFooRepository {
   Foo getFoo();
}

@Repository
public class FooRepository extends ParentRepository implements IFooRepository {
   Foo getFoo() {
      // ...
   }
}

У вас есть идеи, как это исправить и сделать возможным автоматическое подключение IFooRepository?Спасибо за совет.

РЕДАКТИРОВАТЬ:

Я нахожу зеленый боб рядом с @EnableJpaRepositories, и когда я нажимаю на бин, он перенаправляет меня на бар репозитория и не показывает бин FooRepository.Я не понимаю, потому что оба репозитория одинаково реализованы.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Согласно документу для репозиториев jpa

В предыдущем примере Spring получает указание сканировать com.acme.repositories и все его подпакеты на наличие интерфейсов, расширяющих репозиторий или один из его подинтерфейсов.Для каждого найденного интерфейса инфраструктура регистрирует специфичный для технологии сохраняемости FactoryBean для создания соответствующих прокси, которые обрабатывают вызовы методов запроса. см.

Таким образом, в принципе @EnableJpaRepositories - это то же самое, что и конфигурация xml из ссылки - он дает указание найти классы, расширяющие Repository.В вашем примере у вас есть аннотация @Repository, которая инструктирует Spring переводить исключения.Вы должны включить "com.example.foo.repositories", "com.example.bar.repositories" в проверку компонентов.Попробуйте @ComponentScan аннотация см.

0 голосов
/ 14 декабря 2018

Добавление аннотации @Primary в ваш пользовательский репозиторий должно автоматически включать его в другой класс, когда это возможно по умолчанию, даже если есть другие допустимые bean-компоненты для autowire.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...