Ответ
ORM (Object-Relational Mapping) выступает прослойкой между объектной моделью приложения и реляционной БД, автоматизируя преобразование объектов в записи таблиц и обратно.
Основные этапы взаимодействия:
-
Маппинг (Конфигурация): Аннотации связывают Java-классы с таблицами, а поля — со столбцами.
@Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "full_name", nullable = false) private String name; } -
Сессия/Контекст persistence (EntityManager): Это ключевой компонент для работы. Он кеширует объекты (кеш первого уровня), отслеживает их изменения и управляет жизненным циклом.
-
Операции и транзакции: Все операции с БД выполняются внутри транзакций.
EntityManager em = entityManagerFactory.createEntityManager(); em.getTransaction().begin(); User user = new User("Alice"); em.persist(user); // Сохраняет объект (INSERT) User foundUser = em.find(User.class, 1L); // Загружает объект (SELECT) foundUser.setName("Bob"); // Изменение автоматически отслеживается em.getTransaction().commit(); // Все изменения (INSERT, UPDATE) фиксируются в БД -
Генерация и выполнение SQL: ORM преобразует объектные операции (persist, find, JPQL-запросы) в SQL, специфичный для диалекта БД, и выполняет его через JDBC.
-
Обработка результатов: Результирующие наборы (ResultSet) преобразуются обратно в граф объектов.
Преимущества:
- Повышение продуктивности, абстракция от SQL.
- Безопасность типов, кеширование. Недостатки/Риски:
- Наложенные расходы (overhead).
- Риск создания неэффективных SQL-запросов (проблема N+1).
- Сложность оптимизации для специфичных запросов.