Пожалуй, наибольшее количество изменений с выходом спецификации Java EE 6 было привнесено в JPA (Java Persistence API). В серии статей, начиная с этой, я планирую рассказать подбробно о каждом из нововведений.
Введение
Технология JPA является абстракцией над JDBC и позволяет быть независимым от SQL. Все классы и интерфейсы JPA расположены в пакете
javax.persistence
, основными составляющими технологии являются:- ORM (механизм объектно-реляционного отображения);
- Entity manager API — позволяет осуществлять базовые операции CRUD;
- JPQL и Criteria API — механизмы извлечения данных;
- Управление транзакциями и блокировками (как с использованием JTA, так и без);
- Механизмы обратных вызовов и listener-ов.
В JPA 2.0 изменения коснулись следующего:
- Улучшилась поддержка Map-ов: теперь как ключ, так и значение могут быть простым типом, сущностью или встроенным объектом (embedded);
- Коллекции встроенных объектов и простых типов (Integer и т.д.) могут теперь быть вынесены в отдельные таблицы. Ранее в отдельные таблицы было возможно выносить только коллекции сущностей;
- Появилась возможность управлять упорядоченностью персистентных объектов с помощью аннотации
@OrderColumn
; - Появилась возможность удалять объекты-сироты (orphan removal): при удалении родительского объекта удаляется и дочерний;
- Появилась поддержка пессимистической блокировки (оптимистическая поддерживается с JPA 1.0);
- Новый Query Definition API, который позволяет строить запросы в стиле ООП (в противовес написание в строке JPQL запросов);
- Сильно расширились возможности JPQL (язык запросов в JPA);
- Встроенные (embedded) объекты теперь могут входить в состав других встроенных объектов, а также участвовать в связях с сущностями. Навигация по графу объектов с помощью точки была расширена и для использования со встроенными объектами;
- Добавилась поддержка нового API для кэширования.
В данный момент единственным провайдером JPA 2.0 является EclipseLink, он же является reference implementation JPA 2.0. Пользуюсь им уже несколько месяцев и готов сказать, что нахожу этот проект очень стабильным.
В следующей статье я расскажу о нововведениях в декларировании ORM.
Java EE 6. Обзор JPA 2.0, часть 2: Коллекции