Фильтр объектов в весеннем хранилище - PullRequest
1 голос
/ 31 марта 2020

Можно применить фильтр к результатам с аннотациями вместо расширения имени метода?

Например:

@Repository
public interface JobRepository extends JpaRepository<Job, Long> {
    List<Job> findAllByUserAndEnabledIsTrue(User u);
}

Здесь я применяю фильтр 'enabled == true'. Но предположим, у нас есть много методов. Написание их с расширенными именами неудобно. Могу ли я применить этот фильтр ко всему хранилищу?

Я нашел @FilterDef, но я не знаю, как его использовать, а также если Spring поддерживает эту аннотацию.

1 Ответ

1 голос
/ 31 марта 2020

Насколько я знаю, Spring Data JPA не зависит от Hibernate и может работать с любой реализацией JPA. @Filters в Hibernate не является стандартом JPA, поэтому простой ответ - нет! Spring JPA не поддерживает @Filter s.

Но вы можете применять @Filter s, используя AOP, и просто применяя аспекты к вашим методам репозитория.

Кстати, я считаю, лучшее решение должен иметь рукописные запросы с использованием аннотации Spring Data JPA @Query. Потому что таким образом вы можете называть методы по значению их контекста, а не по поводу их внутренней реализации.

Например, вы можете назвать свой метод findActiveJobsForUser, который может быть более значимым и читабельным.

...