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

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

Ответ

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

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

  • JPA определяет интерфейсы и аннотации (например, @Entity, @Id).
  • Hibernate предоставляет их реализацию, а также дополнительные, не входящие в стандарт, функции.

Пример использования JPA (стандартный код):

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

Пример использования нативного API Hibernate:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
User user = new User();
user.setName("John");
// Метод save() — это специфичный для Hibernate API
session.save(user);
tx.commit();
session.close();

Практика: Для переносимости кода лучше использовать стандартный JPA. К нативным возможностям Hibernate (критерии, кэширование второго уровня, специальные типы данных) прибегают, когда нужна оптимизация или функционал за пределами спецификации.