2017-01-04 6 views
0

Я хочу иметь репозиторий для сущностей (обычный репозиторий JPA), а также отдельный репозиторий, который отслеживает информацию аудита (RevisionRepository, часть спящего режима).Использование обоих версий RevisionRepository и JpaRepository в том же приложении

Я не могу заставить это работать в моем приложении.

Насколько я понимаю, каждый тип хранилища должен быть создан с собственным заводом (JpaRepository с repositoryFactoryBeanClass и RevisionRepository с EnversRevisionRepositoryFactoryBean), и которые могут быть установлены с @EnableJpaRepositories аннотацию.

Проблема в том, что только один из этих аннотаций может быть в моем основном классе. Я видел пример этого в xml-форме (here), но я не знаю, как это сделать с аннотациями.

Как это можно сделать?

ответ

0

EnversRevisionRepositoryFactoryBean расширяет JpaRepositoryFactoryBean, поэтому вам нужно указать только EnversRevisionRepositoryFactoryBean в вашей конфигурации, чтобы заставить вас работать на вас.

Что происходит внутри, так это то, что если EnversRevisionRepositoryFactoryBean определяет, что ваш репозиторий не реализует правильный интерфейс, он делегирует супер-реализацию, которая в этом случае является JpaRepositoryFactoryBean.

+0

Это ошибка, я получаю, когда я пытаюсь что: вызвано следующими причинами: org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет квалификационная рожкового типа [... repositories.MyRevisionRepository] не найдено для зависимости [... репозиториев. MyRevisionRepository]: ожидается как минимум 1 бит, который квалифицируется как кандидат на автоподключение для этой зависимости. Аннотации зависимостей: {} – soandos

+0

Можете ли вы разместить свой интерфейс для 'MyRevisionRepository'? – Naros

0

Как-то вам нужно создать два отдельных класса конфигурации для JpaRepositoryFactoryBean и EnversRevisionRepositoryFactoryBean как показано в следующем коде.

@EnableJpaRepositories(basePackages = "com.example.jpa.dao") 
class JpaConfig {} 

@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean, basePackages = "com.example.envers.dao") 
class EnversConfig {} 

Это работает для меня. Но не получилось, почему EnversRevisionRepositoryFactoryBean работает только для RevisionRepository, а не JPRepository, хотя EnversRevisionRepositoryFactoryBean extends JpaRepositoryFactoryBean.

Кто-то, пожалуйста, отредактируйте ответ и объясните его, чтобы он был полезен и для других.

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