В чем разница между Spring Data и Hibernate?

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

Ответ

Spring Data — это umbrella-проект для упрощения доступа к данным. Hibernate — это реализация спецификации JPA, ORM-фреймворк.

Основные различия:

  1. Назначение и уровень:

    • Hibernate решает задачу object-relational mapping (ORM) — отображения Java-объектов на таблицы БД и управления их жизненным циклом в контексте Session/EntityManager.
    • Spring Data (в частности, Spring Data JPA) решает задачу упрощения репозиторного слоя. Он предоставляет абстракцию над механизмами доступа (JPA, JDBC, MongoDB и др.), автоматически генерируя запросы из имён методов.
  2. Взаимодействие: Они не являются конкурентами, а часто используются вместе. Spring Data JPA использует Hibernate как провайдер JPA по умолчанию.

Пример: Один и тот же запрос разными способами

Чистый Hibernate (или JPA):

@EntityManager em = ...;
TypedQuery<User> query = em.createQuery(
    "SELECT u FROM User u WHERE u.email = :email", User.class);
query.setParameter("email", "test@example.com");
List<User> users = query.getResultList();

Spring Data JPA (поверх Hibernate):

public interface UserRepository extends JpaRepository<User, Long> {
    // Запрос генерируется автоматически
    List<User> findByEmail(String email);
}

// Использование
List<User> users = userRepository.findByEmail("test@example.com");

Итог: Hibernate — это "движок" для ORM. Spring Data JPA — это удобная "надстройка" для создания репозиториев, которая делегирует ORM-работу Hibernate (или другому провайдеру).