Допустим, у меня есть два класса: Subject и Client, Subject является базовым классом.
@Entity
public class Client extends Subject
Теперь я хочу добавить настроенный базовый интерфейс Jpa, чтобы методы были доступны в подинтерфейсах:
@NoRepositoryBean
public interface SubjectRepository <T extends Subject> extends
JpaRepository<T, Long>, CustomSubjectRepository<T> {}
CustomSubjectRepository выглядит так:
public interface CustomSubjectRepository<T extends Subject> {
void saveEncrypted(T subject);
}
Мне нужна реализация, поэтому я объявляю класс:
@Repository
@Transactional
public class CustomSubjectRepositoryImpl<T extends Subject> implements
CustomSubjectRepository<T> {
@PersistenceContext
private EntityManager entityManager;
@Override
public void saveEncrypted(T subject) {
//implementation
}
}
Затем хотел создать ClientRepository и наследовать от SubjectRepository , чтобы иметь доступ к saveEncrypted .
@Repository
public interface ClientRepository extends SubjectRepository<Client> {
}
Но когда дело доходит до компиляции, я получаю:
Ошибка создания компонента с именем clientRepository: сбой вызова метода init;Вложенным исключением является java.lang.IllegalArgumentException: не удалось создать запрос для метода public abstract void com.path.repositories.CustomSubjectRepository.saveEncrypted (com.path.models.Subject)!Не найдено свойство saveEncrypted для типа Клиент!