Что такое Java Persistence API (JPA) и его назначение?

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

Ответ

Java Persistence API (JPA) — это стандартная спецификация Java EE/ Jakarta EE для Object-Relational Mapping (ORM), которая описывает, как управлять реляционными данными в Java-приложениях с помощью объектов.

Основная цель: Абстрагировать разработчика от написания нативного SQL и ручного маппинга результатов запросов на объекты.

Ключевые концепции и компоненты:

  • Entity: Обычный Java-класс (POJO), помеченный аннотацией @Entity, который отображается на таблицу БД.
  • EntityManager: Центральный интерфейс для операций с жизненным циклом сущностей (CRUD).
  • JPQL (Java Persistence Query Language): Объектно-ориентированный язык запросов.
  • Persistence Unit: Конфигурация, определяемая в persistence.xml, которая связывает сущности, источник данных и свойства провайдера.

Пример сущности и базовой операции:

import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // Конструкторы, геттеры, сеттеры
}

// Использование EntityManager
EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();

User newUser = new User();
newUser.setName("Alice");
em.persist(newUser); // Сохраняет объект в БД

User foundUser = em.find(User.class, 1L); // Поиск по первичному ключу

em.getTransaction().commit();
em.close();

Популярные реализации: Hibernate, EclipseLink, Apache OpenJPA. JPA упрощает разработку, обеспечивает переносимость кода между разными СУБД и реализациями ORM.