Что такое ORM в контексте JPA?

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

Ответ

ORM (Object-Relational Mapping) — это технология, которая автоматически связывает объекты приложения с записями в реляционной базе данных. JPA (Java Persistence API) — это стандартная спецификация ORM для Java.

Основные задачи ORM:

  • Сопоставление: Автоматическое отображение полей класса на столбцы таблицы, а объектов — на строки.
  • Управление жизненным циклом: Отслеживание состояния объектов (новый, управляемый, отсоединенный, удаленный).
  • Запросы: Выполнение операций CRUD через объектно-ориентированный API (JPQL, Criteria API) вместо нативного SQL.
  • Транзакции и кеширование: Обеспечение целостности данных и повышение производительности.

Пример сущности JPA (Entity):

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "user_name", nullable = false, length = 50)
    private String username;

    // Конструкторы, геттеры, сеттеры
}

Популярные реализации JPA: Hibernate, EclipseLink, Apache OpenJPA.

Преимущества: Ускорение разработки, повышение переносимости кода между СУБД, безопасность (защита от SQL-инъекций). Недостатки/риски: Сложность тонкой оптимизации запросов, накладные расходы, необходимость понимания генерируемого SQL.