Ответ
Spring Data JPA использует механизм создания прокси-реализаций во время запуска приложения (через RepositoryFactorySupport). Реализация генерируется на основе парсинга имени метода и создания соответствующего JPQL-запроса или Criteria API.
Пример объявления:
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastNameAndActiveTrue(String lastName);
long countByAgeGreaterThan(int age);
}
Принцип работы:
- Анализ сигнатуры: Spring разбирает имя метода на части (
findBy,LastName,And,ActiveTrue). - Построение запроса: Генерируется JPQL
SELECT u FROM User u WHERE u.lastName = ?1 AND u.active = true. - Создание реализации: Во время выполнения создаётся прокси-объект, который выполняет этот запрос через
EntityManager.
Ключевые слова в именах методов:
- Нахождение:
findBy,readBy,queryBy,getBy - Подсчёт:
countBy - Удаление:
deleteBy,removeBy - Условия:
And,Or,Between,LessThan,GreaterThan,Like,IgnoreCase,NotNull - Сортировка и пагинация: Дополнительные параметры
Pageable/Sort.
Важно: Для сложных запросов, которые нельзя выразить через имя метода, используйте аннотацию @Query с явным JPQL.