Создание композитных репозиториев в микроавтобусе - PullRequest
1 голос
/ 23 февраля 2020

Я пытаюсь реализовать метод с использованием компонуемого репозитория в micronaut.

У меня есть:

@Repository
public interface EmployeeRepository extends CrudRepository<Employee, Long>, EmployeeRepositoryCustom {
}

Здесь EmployeeRepositoryCustom - это интерфейс с методом list () :

public interface EmployeeRepositoryCustom {
    List<Employee> list();
}

Тогда у меня есть класс EmployeeRepositoryCustomImpl, который реализует методы интерфейса:

public class EmployeeRepositoryCustomImpl implements EmployeeRepositoryCustom {
    @PersistenceContext
    EntityManager em;

    @Override
    @Transactional
    public List<Employee> list() {

       // implementation code
    }
}

Когда я вызываю метод, используя:

@Inject

EmployeeRepository employeeRepository;

public List<Employee> get(){
     return employeeRepository.list();
}

Я получаю следующее сообщение:

java.lang.IllegalStateException: Micronaut Data method is missing compilation time query information. Ensure that the Micronaut Data annotation processors are declared in your build and try again with a clean re-build. 


Я попытался добавить аннотацию @Repository для EmployeeRepositoryCustom и EmployeeRepositoryCustomImpl, но все равно выдает то же сообщение об ошибке. Есть ли способ сделать это?

Я знаю, что могу просто внедрить класс EmployeeRepositoryCustom и получить доступ к методу, но я хочу сделать это с помощью метода составного репозитория. Потому что репозиторий сотрудника происходит из другой схемы (не источника данных по умолчанию, а другого источника данных), и я хотел бы иметь возможность указать схему следующим образом:

@Repository("schema2")

1 Ответ

1 голос
/ 27 февраля 2020

Вы не должны создавать реализацию интерфейса. Если вы хотите иметь методы со своим собственным кодом, вы можете создать хранилище как абстрактный класс и оставить методы, которые вы хотите реализовать, как абстрактные, а затем создать любые конкретные методы.

...