Не получается переопределить метод репозитория Spring Data JPA

В документации вроде все легко, понятно и просто. Метод ни как не хочет генерироваться - вместо переопределенного метода вызывается стандартный метод findAll().

Пытаюсь переопределить метод Page findAll(Pageable pageable); стандартного репозитория PagingAndSortingRepository<T, S>:

Репозиторий:

@Repository
public interface EntityRepository extends PagingAndSortingRepository<Entity, Long>, CustomisedEntityRepository<Entity> {
    @Override
    Page<Entity> findAll(Pageable pageable);
}

Интерфейс с переопределяемым методом:

@NoRepositoryBean
public interface CustomisedEntityRepository<T> {
    Page<T> findAll(Pageable pageable);
}

Класс, с реализацией переопределяемого метода:

public class CustomisedEntityRepositoryImpl<T> implements CustomisedEntityRepository<T> {
    
        @PersistenceContext
        private EntityManager em;
        private final Logger logger = LoggerFactory.getLogger(CustomisedUntityRepositoryImpl.class);
    
        @Autowired
        private AdminService adminService;
    
        @Override
        @Transactional
        public Page<T> findAll(Pageable pageable) {
            Logger.debug("This is a body of overridden method")
            //There is some user's implementation here
        }
    //and others private methods

}

Собственно, к чему это все. Изначально я хотел не переопределить метод, а реализовать кастомный метод полностью, вроде того: Page simpleMethod(Map<String, String> parameters, Pageable pageable). Но артефакт отказывался деплоиться, ссылаясь на то, что у типа Entity отсутствует свойство simpleMethod. Как я понял, Spring не пытался создать кастомный метод, а упорно пытался сгенерировать какой-то базовый метод, опираясь на название моего, что-то вроде findByName и тщательно искал свойство simpleMethod в моем Entity, погуглив денек, я так и не нашел ответов и решил попробовать стандартный метод переопределить, но и тут что-то пошло не так.

Буду крайне благодарен, если кто-то знает что-то чего до сих пор не знаю я, поделитесь или может быть где-то есть какая-то ошибка в коде. Прегуглил весь гугл, но решение не находится.

Всем спасибо за внимание и потраченное время!


Ответы (1 шт):

Автор решения: Fox2k

  Добрый день. В своем вопросе Вы упоминаете документацию, но поскольку ссылку Вы не приводите, предположу, что речь про эту документацию.
  Помимо этого, я недавно решал вопрос о переопределении стандартного метода Optional<T> findById(ID id); из CrudRepository<T, ID>, пытаясь добавить в его логику стандартную обработку Optional<T> и не писать ее в сотне мест кода где должен быть вызван findById(ID id). Я не смог оставить прежним название метода т.к. при этом нужна сигнатура отличная от оригинальной. Я создал новый интерфейс:

@NoRepositoryBean
public interface JpaRepositoryRedefined<T, ID extends Serializable> extends JpaRepository<T, ID> {

  default T findByIdRedefined(ID id) {
    return findById(id)
        .orElseThrow(() -> new ObjectNotFoundException("Entity with id = " + id + " not found"));
  }
}

который вставил везде где ожидался JpaRepository<T, ID> и для получения сущностей соответственно стал использовать метод findByIdRedefined.

→ Ссылка