Что такое JPA и Hibernate? Использовали ли вы их?

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

Ответ

JPA (Java Persistence API) — это стандартная спецификация Java для ORM (Object-Relational Mapping). Hibernate — самая популярная реализация этой спецификации.

Основные концепции и пример:

  1. Маппинг сущности: Класс Java аннотируется для отображения на таблицу БД.

    @Entity
    @Table(name = "users")
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        @Column(name = "username", nullable = false)
        private String username;
        // Геттеры и сеттеры
    }
  2. Работа с EntityManager: Выполнение операций CRUD.

    // Создание EntityManager (обычно инжектится через Spring)
    EntityManager em = entityManagerFactory.createEntityManager();
    
    em.getTransaction().begin();
    User user = new User();
    user.setUsername("JohnDoe");
    em.persist(user); // Сохранение (INSERT)
    em.getTransaction().commit();
    
    User foundUser = em.find(User.class, 1L); // Поиск по ID (SELECT)

Почему Hibernate?

  • Стандарт (JPA): Позволяет сменить провайдера (например, на EclipseLink).
  • Продуктивность: Автоматизирует рутинный SQL.
  • Дополнительные возможности Hibernate: HQL, Criteria API, кэширование 1-го и 2-го уровня, расширенные типы данных.

Конфигурация задается в persistence.xml или в Spring Boot через application.properties (например, spring.jpa.hibernate.ddl-auto=update).