Обязательно ли использовать ORM для реализации Java Persistence API (JPA)?

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

Ответ

Нет, ORM — это лишь одна из возможных реализаций спецификации JPA. JPA определяет API, но не диктует способ реализации доступа к данным.

Варианты реализации JPA:

  1. ORM (Hibernate, EclipseLink): Наиболее распространённый вариант. Автоматизирует объектно-реляционное отображение.

    @Entity
    public class User { 
        @Id 
        private Long id;
        private String name;
    }
    // Hibernate выполнит маппинг и SQL
    User user = em.find(User.class, 1L);
  2. JDBC (без ORM): Вы можете реализовать репозитории, соответствующие JPA-спецификации (интерфейсы EntityManager), но с "ручным" выполнением SQL через JDBC для полного контроля.

  3. Другие провайдеры: Существуют реализации JPA для NoSQL баз данных (например, DataNucleus, Hibernate OGM).

Критерии выбора:

  • Выберите ORM (Hibernate) для сложных доменных моделей с наследованием, связями, когда нужна декларативная работа (аннотации) и кеширование.
  • Рассмотрите чистый JDBC или "тонкие" обёртки (JdbcTemplate, JOOQ) для высокопроизводительных пакетных операций, сложных аналитических запросов или работы с легаси-схемами, не соответствующими объектной модели.