Ответ
Преимущества Spring Data JPA:
- Сокращение шаблонного кода: Автоматическая генерация стандартных CRUD-операций через репозитории.
- Удобные декларативные запросы: Создание запросов по именам методов (например,
findByLastNameAndFirstName). - Интеграция со Spring: Полная поддержка механизмов транзакций и DI.
- Дополнительные возможности "из коробки": Пагинация, сортировка, аудит, поддержка спецификаций (Specification API).
Недостатки Spring Data JPA:
- Проблема N+1 запроса: При ленивой загрузке коллекций может генерироваться избыточное количество SQL-запросов. Требует внимания (
@EntityGraph,JOIN FETCH). - Сложность отладки: Абстракция скрывает реальные SQL-запросы, что затрудняет анализ производительности.
- Ограничения для сложных запросов: Сложные аналитические запросы или специфический SQL часто требуют использования нативных запросов (
@Query), что снижает переносимость. - Производительность: Автоматически сгенерированные запросы не всегда оптимальны.
Пример репозитория с декларативным запросом:
public interface BookRepository extends JpaRepository<Book, Long> {
// Spring Data JPA сгенерирует запрос: SELECT * FROM book WHERE title LIKE %:titlePart%
List<Book> findByTitleContainingIgnoreCase(String titlePart);
// Пример запроса с явным JPQL
@Query("SELECT b FROM Book b WHERE b.publicationYear > :year")
List<Book> findBooksPublishedAfter(@Param("year") int year);
}