Переместить репозиторий Spring в другую папку

Можно ли переместить реализацию репозитория весенних данных в другую папку (не ту же или подпапку исходного интерфейса)? Если у меня есть интерфейс и реализация в одной папке, все работает нормально. Если я перемещу его, например, с com.app.domain.repo на com.app.infrastr.repo, я получу Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property methodName found for type RepoInterfaceName.

ОБНОВЛЕНИЕ

import com.app.domain.repo

public interface ARepo extends ElasticsearchRepository<A, String>, CustomizedARepo {
}

public interface CustomizedARepo {
    List<A> makeSearch(int x);
}

import com.app.infrastr.repo

public class CustomizedARepoImpl implements CustomizedARepo {

    private ElasticsearchTemplate elasticsearchTemplate;

    public CustomizedARepoImpl(ElasticsearchTemplate elasticsearchTemplate) {
        this.elasticsearchTemplate = elasticsearchTemplate;
    }

    @Override
    public List<A> makeSearch(int x){ return null; }
}

И класс конфигурации

@Configuration
@EnableElasticsearchRepositories(basePackages = {"com.app.domain.repo", "com.app.infrastr.repo"})
public class Config{}

Ошибка:

Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property makeSearch found for type ARepo

Если я перемещаю CustomizedARepoImpl в com.app.domain.repo, все работает нормально.


person Bojan Vukasovic    schedule 01.12.2017    source источник
comment
Пожалуйста, предоставьте соответствующий код здесь, чтобы помочь людям ответить. Здесь есть много возможностей. Я предполагаю, что у вас есть собственный bean-компонент entityManagerFactory(), который указывает на конкретный пакет.   -  person Brian    schedule 01.12.2017
comment
Я обновил вопрос.   -  person Bojan Vukasovic    schedule 01.12.2017
comment
Основываясь на том, что вы добавили, мне интересно, смешиваете ли вы репозитории JPA и ES. Помогает ли этот ответ? stackoverflow.com/a/32879779/4614870   -  person Brian    schedule 01.12.2017
comment
@ Брайан, у меня нет репозиториев Jpa. Только это единственное репозиторий Elastic search и его реализация. Я не использую весеннюю загрузку.   -  person Bojan Vukasovic    schedule 01.12.2017


Ответы (1)


Я нашел причину. Это метод getBasePackages внутри файла RepositoryBeanDefinitionBuilder в spring-data-commons, который позволяет реализовать реализацию в той же папке, что и эта.

public Iterable<String> getBasePackages() {
            return Collections.singleton(ClassUtils.getPackageName(fragmentInterfaceName));
        }

Если я изменю это на

public Iterable<String> getBasePackages() {
            return configuration.getBasePackages();
        }

все работает как положено. Проверим, почему ребята из весны так поступили...

person Bojan Vukasovic    schedule 01.12.2017