2. Содержание
• Что такое и Почему используем O/R Mapper (ORM)?
• Что нам дает JPA?
• O/R Отображения
• Что такое Entity?
• Программная модель JPA
• EntityManager и операции управления Entity
• Отсоединенные объекты
• Жизненный цикл Entity
• Persistence контекст и EntityManager
3. Почему Object/Relational
Mapping?
• Одна из главных частей любого энтерпрайз
приложения – уровень persistence
– Доступ и управление перманентными данными,
обычно с применением реляционной БД
• ORM берет на себя “превращение” таблицы в
объект
– Данные живут в реляционной БД, т.е. в таблицах
(в строчках и столбцах)
– Мы же хотим работать с объектами, а не с
колонками и столбцами
4. Что нам дает JPA?
• Упрощение модели persistence
– Использование значений по умолчанию вместо
сложных настроек
– Отказ от конфигурационных файлов
• Предоставление легковесной модели
persistence
– Увеличение быстродействия
• Предоставление возможности тестировать
вне контейнера
– TDD
• Единый API для Java SE и Java EE
5. O/R Отображения
• Обширный набор аннотаций для описания
отображений (mapping)
– Связи
– Объединения
– Таблицы и колонки БД
– Генераторы последовательностей для БД
– Многое другое
• Возможно использовать отдельный
конфигурационный файл для описания
отображений (mapping)
8. Что такое Entity?
• Простой Java класс (Plain Old Java Object POJO)
- Создается как обычный Java класс – при
помощи new
- Нет необходимости реализовывать
интерфейсы в отличии от EJB 2.1 entity beans
• Может содержать перманентные и не
перманентные данные
- Не перманентные данные помечаются
transient или @Transient
• Может расширять другие entity и не-entity
классы
9. Идентификация Entity
• Любой Entity имеет перманентный
идентификатор
- Он отображается в первичный ключ в таблице
• Идентификатор — примитивный тип
- @Id—одиночное поле/свойство в Entity классе
- @GeneratedValue—значение может генерироватся
автоматически, используя различные стратегии
(SEQUENCE, TABLE, IDENTITY, AUTO)
• Идентификатор – пользовательский класс
- @EmbeddedId—одиночное поле/свойство в Entity
классе
- @IdClass—соответствует множеству полей в Entity
классе
11. EntityManager
• Управляет жизненным циклом Entity объектов
– persist() - помещает объект в БД
– remove() - удаляет объект из БД
– merge() - синхронизирует с БД состояние
отсоединенного объекта
– refresh() - обновляет из БД состояние объекта
16. Persistence контекст и
EntityManager
• Persistence контекст
– Множество управляемых Entity объектов во
время работы приложения
– “Объект со статусом управляемый” означает
что он принадлежит определенному persistent
контексту
• EntityManager
– Выполняет операции связанные с жизненным
циклом Entity объекта – управляет persistent
контекстом
17. Persistence контекст и
EntityManager
• Persistence контекст напрямую не доступен
разработчику напрямую
– Программного доступа к Persistence контекст
нет — в этом нет необходимости
– Доступ Persistence контекст осуществляется
через EntityManager
• Тип EntityManager определяет как будет
persistence контекст будет создаваться и удаляться
19. Как создать EntityManager
• Разные типы EntityManager создаются по
разному
– Управляемый контейнером EntityManager
(Java EE) создается контейнером и становится
доступным для приложения через механизм
инъекций
Используется аннотация @PersistenceContext
– Управляемый приложением EntityManager
(Java SE) создается и закрывается
(уничтожается) приложением.
20. Persistence Unit
• Все Entity объекты управляемые определенным
EntityManager определяются при помощи
Persistence Unit
• persistence.xml определяет один или несколько
Persistence Unit