Какие преимущества и недостатки у Spring Data JPA?

«Какие преимущества и недостатки у Spring Data JPA?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Преимущества 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);
}