Ответ
Spring Data JPA — это надстройка над JPA (чаще всего Hibernate), которая значительно сокращает объем шаблонного кода для доступа к данным.
Ключевые преимущества:
-
Репозитории: Достаточно объявить интерфейс, расширяющий
JpaRepository. Spring Data предоставит его реализацию.public interface UserRepository extends JpaRepository<User, Long> { // Готовые методы: save(), findById(), findAll(), deleteById() } -
Генерация запросов из имен методов: Spring Data анализирует имя метода и создает JPQL-запрос.
List<User> findByEmailAndActiveTrue(String email); Page<User> findByLastName(String lastName, Pageable pageable); -
Аннотация
@Query: Для сложных запросов можно написать JPQL или нативный SQL.@Query("SELECT u FROM User u WHERE u.createdAt > :date") List<User> findRecentUsers(@Param("date") LocalDate date); -
Встроенная поддержка пагинации и сортировки через объект
Pageable.
Важные нюансы:
- Проблема N+1: Spring Data не решает ее автоматически. Для жадной загрузки связей нужно использовать
@EntityGraphилиJOIN FETCHв@Query. - Для сложной динамической логики (множественные фильтры) используйте Specification API или Querydsl.
- Spring Data JDBC — более легковесная альтернатива для простых проектов, не требующих всех возможностей JPA.