Как связаны JPA и Hibernate в Java?

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

Ответ

JPA (Java Persistence API) — это стандартная спецификация ORM для Java, определяющая набор интерфейсов и аннотаций для работы с реляционными базами данных. Hibernate — одна из самых популярных реализаций этой спецификации.

Ключевые отношения:

  • JPA — это стандарт, Hibernate — его реализация. Аналогично связи между JDBC (API) и конкретным драйвером базы данных (реализация).
  • Hibernate реализует все аннотации и интерфейсы, описанные в JPA (например, @Entity, @Id, EntityManager).
  • Hibernate также предоставляет собственные расширенные возможности (например, HQL, критерии, кэширование второго уровня), которые выходят за рамки стандарта JPA.

Пример кода с аннотациями JPA:

import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // Геттеры и сеттеры
}

Этот код использует только JPA-аннотации, но для его работы в приложении требуется реализация JPA, например, Hibernate.

Практический вывод: Вы пишете код, используя стандартный API JPA (что обеспечивает переносимость), а Hibernate выполняет всю "тяжелую" работу по преобразованию объектов в SQL-запросы и обратно.