Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемЛюдмила Гамаюнова
1 Рассматриваемые темы Java Persistence API Сущности (Entities) Транзакции в JPA Иерархия классов и JPA Связи в JPA EJB-QL Обработчики (Listeners) 2-1
2 Java Persistence API Место JPA 2-2
3 Java Persistence API Автоматическое отслеживание статуса сущности и его сохранение Простота конфигурации Унифицированный интерфейс Свобода от закрытых решений Цели JPA 2-3
4 Java Persistence API EJB 3 Persistence Слой объектно-реляционного преобразования JSR-220 Направлен на использование реляционных БД Простой API Мощный язык запросов Что такое JPA? 2-4
5 Java Persistence API Имеет имя Имя может быть пустым, если в приложении только один модуль Ассоциируется с: Набором классов сущностей БД для хранения информации Единая конфигурация Единый набор метаданных Что такое Модуль JPA Persistence? 2-5
6 Java Persistence API JPA отслеживает управляемые (managed) сущности Их изменения фиксируются в БД при завершении транзакции JPA загружает поля и связи управляемых объектов по запросу приложения Отсоединенные и вновь созданные сущности не являются managed Что такое управляемые сущности? 2-6
7 Java Persistence API Набор управляемых объектов в одном Persistence-модуле Каждый EntityManager связан c одним PersistenceContext 'ом PersistenceContext может быть связан с несколькими EntityManager 'ами Что такое PersistenceContext? 2-7
8 Java Persistence API PersistenceContextType.TRANSACTIONAL PersistenceContextType.EXTENDED По умолчанию в J2SE В Java EE 5 Для компонентов с управляемыми транзакциями по умолчанию TRANSACTIONAL Для остальных по умолчанию - EXTENDED У PersistenceContext есть диапазон 2-8
9 Java Persistence API Managed сущности при фиксации транзакции отсоединяются Загруженные сущности Становятся managed только если транзакция активна Сущности не могут быть изменены вне транзакции Иначе возникает TransactionRequiredException PersistenceContext с TRANSACTIONAL диапазоном 2-9
10 Java Persistence API Managed сущности при фиксации транзакции остаются managed Загруженные сущности managed независимо от транзакций Сущности могут быть изменены вне транзакции Изменения сохраняются если позже транзакция начата и зафиксирована PersistenceContext с EXTENDED диапазоном 2-10
11 Java Persistence API EntityManager JPA 2-11
12 Java Persistence API Расширение байт-кода Разработка POJO-сущности Определение хранимых полей с помощью метаданных Компиляция Расширение байт-кода Как EntityManager отслеживает изменения статуса? 2-12
13 Java Persistence API Параметры аннотации: unitName имя JPA модуля type : PersistenceContextType.TRANSACTIONA L PersistenceContextType.EXTENDED EntityManager в EJB public class ServiceBean implements Service EntityManager em;... }
14 Java Persistence API boolean isOpen() IllegalStateException если EM получен с помощью Injection IllegalStateException если транзакция активна После закрытия все методы вызывают IllegalStateException void close() Методы жизненного цикла в интерфейсе EntityManager 2-14
15 Java Persistence API void persist(Object entity) Делает вновь созданную сущность управляемой Данные сохраняются при фиксации транзакции void remove(Object entity) Помечает сущность к удалению Удаление происходит при фиксации транзакции Интерфейс EntityManager 2-15
16 Java Persistence API void refresh(Object entity) Обновляет данные в сущности Перезаписывает все изменения T find(Class entityClass, Object key) Может вернуть null Предпочтительнее, чем getReference T getReference(Class entityClass, Object key) Не возвращает null Интерфейс EntityManager 2-16
17 Java Persistence API Содержит два метода для получения EntityManagerFactory puName имя Persistence модуля Может быть пустым Опция Map позволяет задавать специфичные параметры Утилитный класс Persistence в JPA 2-17
18 Java Persistence API Содержит два метода для получения EntityManager createEntityManager() createEntityManager(Map map) Содержит два метода жизненного цикла boolean isOpen() void close() Интерфейс EntityManagerFactory 2-18
19 Java Persistence API EntityManagerFactory 2-19
20 Java Persistence API Получить запрос пользователя Решить, стоит ли открывать контекст транзакции Найти хранимые объекты Изменить хранимые объекты Принять решение о фиксации/ отмене/продолжении транзакции Повтор Типовой жизненный цикл приложения, использующего БД 2-20
21 Java Persistence API Модель должна знать, как: Найти хранимые объекты Изменить хранимые объекты Обработать транзакции Следить за целостностью Модель не должна знать об остальном приложении Приложение обращается к модели Дизайн Model в архитектуре MVC как сервиса для приложения 2-21
22 Java Persistence API Архитектура MVC-приложения 2-22
23 Java Persistence API Сервис в модели предоставляет: Поиск Обработку сохранения Может быть несколько сервисов Решения об использовании объектов модели вне модели detached или управляемые сущности Решения о контроле транзакций 2-23 Архитектура MVC-приложения
24 Рассматриваемые темы Java Persistence API Сущности (Entities) Транзакции в JPA Иерархия классов и JPA Связи в JPA EJB-QL Обработчики (Listeners) 2-24
25 Сущности (Entities) Должны быть top-level классами Не могут быть final Не могут иметь final поля или методы Должны иметь public или protected конструктор без аргументов Требования к хранимым классам 2-25
26 Сущности (Entities) Должны иметь объявленный первичный ключ Могут быть абстрактными и конкретными Должны идентифицироваться в метаданных мапинга Хранимые поля должны быть поддерживаемых типов Требования к хранимым классам 2-26
27 Сущности (Entities) Информация, необходимая JPA- имплементации для обеспечения взаимодействия объектной модели и БД Имя таблицы в БД Первичные ключи Каскадирование для связей Стратегия и поля версий И т.д. Что такое метаданные мапинга? 2-27
28 Сущности (Entities) Аннотации JPA Наш курс использует только аннотации XML-файлы (ORM-файлы) Настройки, указаннае в файлах, более приоритетны, чем соответствующие аннотации Определение метаданных мапинга 2-28
29 Сущности (Entities) Используйте аннотацию Entity Могут наследоваться от Mapped Superclass Других классов сущностей Нехранимых классов Поля нехранимых классов никогда не сохраняются Классы сущностей 2-29
30 Сущности (Entities) Доступ к свойствам С помощью JavaBean-методов Доступ к полям Один тип доступа применяется ко всей иерархии сущностей Определяется Положением первой аннотации Значением тэга в метаданных Два типа доступа в JPA 2-30
31 Сущности (Entities) Свойства должны иметь методы get и set Методы свойств должны быть public или protected Аннотируется только метод get JPA-имплементация будет использовать эти методы Бизнес-логика в аксессорах может привести к побочным эффектам Требования для доступа к свойствам 2-31
32 Сущности (Entities) Поля должны быть public, package или protected Аннотируются поля JPA-имплементация обеспечивает доступ к этим полям Рекомендуется использовать доступ к полям Требования для доступа к полям 2-32
33 Сущности (Entities) Однозначно идентифицирует состояние сущности в БД Может состоять из одного или нескольких полей Ссылки на другие сущности не могут быть ключами Должен быть определен для старшего класса иерархии Идентификатор (ключ) сущности 2-33
34 Сущности (Entities) По умолчанию ключ должен определяться Параметры: strategy GenerationType AUTO по умолчанию TABLE, SEQUENCE, IDENTITY generator Аннотации простого ключа 2-34
35 Сущности (Entities) Использует определенный в приложении класс ключа public -класс верхнего уровня или public static вложенный класс Реализует Serializable public конструктор по умолчанию Методы hashCode и equals используют ключевые поля Составные ключи 2-35
36 Сущности (Entities) Аннотирование класса ключа и его полей Аннотирование поля встроенного ключа Аннотации составных ключей 2-36
37 Сущности (Entities) Значения хранимых полей сохраняются в БД Два типа хранимых полей: Простые (поля-значения) Отношения (связи) transient поля не могут быть хранимыми Остальные поля хранимы по умолчанию Хранимые поля 2-37
38 Сущности (Entities) Примитивные типы и их обертки java.lang.String java.math.BigInteger/BigDecimal java.util.Date/Calendar java.sql.Date/Time/Timestamp Массивы Byte, Byte, char, Char Перечисления Любой Serializable класс Типы простых полей 2-38
39 Сущности (Entities) Опциональна, но рекомендуется для определения типа доступа Два параметра: fetch FetchType.EAGER (по умолчанию) FetchType.LAZY optional true (по умолчанию для непримитивов) false (по умолчанию для примитивов) Аннотации простых полей 2-39
40 Сущности (Entities) Дополняет Применяется к полям типа java.util.Date/Calendar Возможные значения: TemporalType.DATE TemporalType.TIME TemporalType.TIMESTAMP 2-40
41 Сущности (Entities) Дополняет Применяется к полям-перечислениям Возможные значения: EnumType.ORDINAL EnumType.STRING 2-41
42 Сущности (Entities) Экземпляры хранимых классов Отсоединены от EntityManagerа После отсоединения, EM не загружает поля «по запросу» Изменения непосредственно не отображаются в БД Могут быть изменены вне активной транзакции Что такое отсоединенные сущности? 2-42
43 Сущности (Entities) Отсоединение происходит, когда: Закрывается EM У EM вызывается метод clear() Сущность проходит через сериализацию Транзакция откатывается При откате активной транзакции вызывается метод clear() Создание отсоединенных сущностей 2-43
44 Сущности (Entities) В транзакционном контексте отсоединение происходит: При выполнении запроса вне транзакции После фиксации транзакции Если объект изменен, предполагается, что изменения будут зафиксированы Поле версии соответствует ожидаемому после фиксации Создание отсоединенных сущностей 2-44
45 Сущности (Entities) Метод интерфейса EntityManager contains Определяет, является ли сущность управляемой Проверка на отсоединенность 2-45
46 Сущности (Entities) Загруженными остаются поля, загруженные у управляемой сущности Загруженные связи сохраняются Создается граф отсоединенных объектов Загружаются: Поля с ранней загрузкой (по умолчанию) и поля с поздней загрузкой, уже запрошенные приложением и загруженные Поля, загруженные при join Загрузка полей при отсоединении 2-46
47 Сущности (Entities) Отсоединенные сущности могут быть объединены с текущим контекстом EM Копирует измененные поля в управляемую сущность Если сущность новая, то создается новый управляемый экземпляр Объединение (merging) 2-47
48 Сущности (Entities) Связи обрабатываются рекурсивно, если Выставлен атрибут cascade=CascadeType.MERGE И связь загружена в отсоединенный объект Изменения в результате объединения сохраняются при фиксации транзакции Объединение (merging) 2-48
49 Рассматриваемые темы Java Persistence API Сущности (Entities) Транзакции в JPA Иерархия классов и JPA Связи в JPA EJB-QL Обработчики (Listeners) 2-49
50 Транзакции в JPA БД может выполнять несколько транзакций одновременно Каждая транзакция может включать несколько шагов Свойства транзакции: Atomicity атомарность Consistency надежность Isolation изоляция Durability долговечность ACID - свойства транзакции 2-50
51 Транзакции в JPA Целостность обновления Изменения не могут быть зафиксированы, если изменяемые данные устарели Надежность чтения Все данные, считанные в течение транзакции, не устарели к моменту фиксации изменений Транзакционные характеристики 2-51
52 Транзакции в JPA Пессимистичные блокировки Реализация уровня изоляции повторных чтений Оптимистичные проверки модифицируемых объектов Изоляция на основе упорядочивания Целостность обновления 2-52
53 Транзакции в JPA Пессимистичные блокировки Оптимистичные проверки читаемых объектов Реализация изоляции на основе упорядочивания Надежность чтения 2-53
54 Транзакции в JPA Клиент получает эксклюзивное право на чтение записи Уменьшает максимально допустимое количество обращений Deadlock возможен, его избежание забота разработчика Не определены в JPA Пессимистичные блокировки 2-54
55 Транзакции в JPA Имплицитно выполняются JPA на изменяемых объектах Необходимо поле версии ) При изменении проверяется версия Несоответствие версии ведет к откату транзакции Из-за отсутствия блокировок возможно максимальное количество обращений Оптимистичные проверки 2-55
56 Транзакции в JPA int, short, long, Integer, Long, Short, java.sql.Timestamp Поле не должно изменяться приложением Без поля версии, пересекающиеся изменения не распознаются 2-56
57 Транзакции в JPA Некоторые приложения могут декомпозировать сущности Web-приложения посылают клиенту атрибуты Приложение может производить самостоятельный контроль версий и посылать клиенту исключения Проверки в приложении 2-57
58 Транзакции в JPA EntityManager предоставляет метод lock public void lock(Object entity, LockModeType mode) Сущность должна быть управляемой Транзакция должна быть активна Явные блокировки в JPA 2-58
59 Транзакции в JPA Метод lock с LockTypeMode.READ Две транзакции, запрашивающие блокировку на чтение на одну и ту же сущность, успешны, если: Ни одна не изменяет сущность Или реализация заставляет транзакцию сериализоваться Для успешных транзакций чтение при использовании блокировки на чтение целостно Блокировки на чтение 2-59
60 Транзакции в JPA Метод lock с LockTypeMode.WRITE Приводит к запросу блокировки в БД или проверке версии при фиксации изменений Требует изменения версии сущности Две транзакции, запрашивающие блокировку на чтение на одну и ту же сущность, успешны, если: Реализация требует сериализации транзакции Блокировки на запись 2-60
61 Транзакции в JPA OptimisticLockException Возникает в методах merge или flush Помечает транзакцию к откату Может возникнуть в методе commit RollbackException Возникает при неудаче метода commit, если происходит откат транзакции Исключения 2-61
62 Практика Разработка сохраняемых простых сущностей с использованием транзакционных механизмов. Упражнение 2-62
63 Рассматриваемые темы Java Persistence API Сущности (Entities) Транзакции в JPA Иерархия классов и JPA Связи в JPA EJB-QL Обработчики (Listeners) 2-63
64 Иерархия классов и JPA Классы, не являющиеся сущностями, могут присутствовать в иерархии Хорошая практика делать их абстрактными Классы сущностей могут быть абстрактными и конкретными Классы в иерархии сущностей 2-64
65 Иерархия классов и JPA Mapped Superclass Единая таблица Объединение таблиц Таблица на класс Стратегии маппинга наследования 2-65
66 Иерархия классов и JPA Аннотация класса без параметров MappedSuperclass не отображается на отдельную таблицу Не может участвовать в запросах, в отношениях Может быть только на самом верху иерархии Mapped Superclass 2-66
67 Иерархия классов и JPA Определяет одну из трех стратегий: Единая таблица (SINGLE_TABLE) Объединение таблиц (JOINED) Таблица на класс (TABLE_PER_CLASS) Используется на старшем классе в иерархии (не MappedSuperclass) Аннотация наследования 2-67
68 Иерархия классов и JPA Все классы хранятся в одной таблице Быстрая, простая модель Хорошо протестирована Использует столбец- дискриминатор Стратегия единой таблицы 2-68
69 Иерархия классов и JPA Отличный выбор, когда Данные сосредоточены в верхних классах иерархии Поведение в нижних Не рекомендуется, если данные распределены в большой иерархии Таблица с множеством столбцов Большинство столбцов nullable Невозможно применение простых ограничений (constraints) Использование единой таблицы 2-69
70 Иерархия классов и JPA Стратегия объединения таблиц 2-70 Каждый класс хранится в своей таблице Абстрактные классы тоже отображаются Использует столбец- дискриминатор
71 Иерархия классов и JPA Преимущества Наиболее нормализованные таблицы Нет проблем с ограничениями (constraints) на столбцах Модель данных легко расширяема Недостатки Чтение приводит к объединению или нескольким запросам Вставка и обновление затрагивают несколько таблиц Особенности объединения таблиц 2-71
72 Иерархия классов и JPA Отличный выбор, когда Иерархия не слишком глубока Необходимые объединения при чтении не приводят к потере производительности Не много обновлений данных Данные распределены по иерархии Не рекомендуется, если Множество классов в иерархии добавляет лишь поведенческие особенности 2-72 Использование объединения таблиц
73 Иерархия классов и JPA Определяет столбец-дискриминатор При хранении информации о нескольких классах в одной таблице, необходимо средство их дискриминации Реализация создает столбец при необходимости 2-73
74 Иерархия классов и JPA Стратегия таблицы на класс 2-74 Каждый конкретный класс в своей таблице Абстрактные классы отображаются на таблицы наследников Столбец-дискриминатор не используется
75 Иерархия классов и JPA Исправляет недостатки двух предыдущих стратегий Разделяет данные в несколько таблиц Позволяет избежать объединений при операциях с известным типом Наиболее быстрый вариант при операциях с определенным типом Затрагивается одна таблица Меньше строк и столбцов для получения Преимущества таблицы на класс 2-75
76 Иерархия классов и JPA Значительные ограничения на полиморфные отношения Например: Получение Set em.find(Person.class, id) Приводят к многочисленным запросам или одному запросу с множеством объединений Недостатки таблицы на класс 2-76
77 Рассматриваемые темы Java Persistence API Сущности (Entities) Транзакции в JPA Иерархия классов и JPA Связи в JPA EJB-QL Обработчики (Listeners) 2-77
78 Связи в JPA Количество элементов Один-к-одному Один-ко-многим Много-ко-многим Зависимость Ассоциация Композиция Направление Однонаправленные Двунаправленные Свойства связей 2-78
79 Связи в JPA В SQL все связи двунаправленные В Java все связи однонаправленные Двунаправленные связи в Java моделируются двумя однонаправленными Две ссылки в памяти моделируют одно значение в реляционной БД Приложение должно управлять двунаправленными связями в Java Двунаправленные связи 2-79
80 Связи в JPA Свойство Cascade Определяет действия менеджера сущностей по отношению к связанным сущностям CascadeType enum PERSIST REMOVE, REFRESH, MERGE, ALL Каскадирование в JPA по умолчанию отключено Каскадирование в JPA 2-80
81 Связи в JPA Fetch определяет при выборке сущности действия со связанными сущностями FetchType enum EAGER Связанная сущность загружается вместе со связывающей По умолчанию для «к-одному» связей Выборка (fetch) в JPA 2-81
82 Связи в JPA LAZY Связанная сущность загружается при первом использовании в приложении По умолчанию для «ко-многим» связей «Совет» JPA-механизму, который может по своему усмотрению использовать «раннюю» выборку Выборка (fetch) в JPA 2-82
83 Связи в JPA Интерфейсы из java.util : Collection Set List Map Коллекции должны быть коллекциями сущностей Map'ы должны иметь примитивные ключи и значения-сущности Поддерживаемые типы связей в JPA 2-83
84 Связи в JPA Списки не сортируются имплицитно Для указания сортировки используется JPA использует сортировку только при выборке Сортировка списков в JPA 2-84
85 Связи в JPA Четыре стандартных аннотации связей 2-85
86 Связи в JPA Атрибут fetch Значение по умолчанию зависит от типа отношений Атрибуты аннотаций связей 2-86 Атрибут cascade По умолчанию отсутствие каскадирования
87 Связи в JPA Один-к-одному 2-87 Все «к-одному» отношения имеют атрибут optional По умолчанию true Если связь двунаправленная, одна из сторон владелец Вторая сторона использует атрибут mappedBy
88 Связи в JPA Один-к-одному 2-88 Все «к-одному» отношения имеют значение атрибута fetch по умолчанию EAGER Переопределение: Столбец вторичного ключа имеет ограничение на уникальность
89 Связи в JPA Много-к-одному 2-89 Всегда владелец какой-либо двунаправленной связи Значение атрибута fetch по умолчанию EAGER Вторичный ключ не имеет ограничения на уникальность
90 Связи в JPA Один-ко-многим 2-90 Значение атрибута fetch по умолчанию для всех «ко-многим» связей LAZY В случае двунаправленных связей используется атрибут mappedBy
91 Связи в JPA Много-ко-многим 2-91 Значение атрибута fetch по умолчанию LAZY Всегда моделируются соединением таблиц В случае двунаправленной связи используется mappedBy
92 Связи в JPA Много-ко-многим 2-92 Значение атрибута fetch по умолчанию LAZY Всегда моделируются соединением таблиц В случае двунаправленной связи используется mappedBy
93 Связи в JPA Map в JPA 2-93 Один-ко-многим или много-ко- многим Ключ всегда является одним из полей сущности-значения
94 Рассматриваемые темы Java Persistence API Сущности (Entities) Транзакции в JPA Иерархия классов и JPA Связи в JPA EJB-QL Обработчики (Listeners) 2-94
95 EJB-QL Запросы 2-95 Имя сущности простое имя класса Ключевые слова не чувствительны к регистру, имена сущностей, полей и параметры - чувствительны
96 EJB-QL Создание запросов 2-96 Запросы создаются фабричными методами EntityManager 'а Фильтры для именованных запросов определяются в метаданных
97 EJB-QL Синтаксис оператора select 2-97 Общий синтаксис: select [distinct] [ ] from [where ] [ group by ] [ having ] [ order by ] Синтаксис близок к SQL
98 EJB-QL Типы выборки 2-98 Выборка сущностей: Выборка агрегатных значений: Выборка проекций: Выборка пользовательских классов
99 EJB-QL Использование Dot-нотации 2-99 Примеры использования: Если при вычислении логического выражения появляется null, выражение принимает значение false
100 EJB-QL Использование объединений Пример использования: Необходимо использовать ключевое слово distinct Inner join (join) Left join (left outer join)
101 EJB-QL Условные выражения Сравнение >, =, like is [not] null is [not] empty in {ALL|SOME|ANY} (подзапрос)
102 EJB-QL Логические операторы Три стандартных оператора для комбинирования условий and or not
103 EJB-QL Параметры Параметры именуются в запросе с помощью: Имени: :bName, :x... Позиции: ?1, ?2... Параметры выставляются до выполнения запроса: setParameter(String name,Object val) setParameter(int pos, Object val)
104 EJB-QL Выборка при объединении В запросе можно указать тип «ранней» выборки с помощью fetch для «ко-многим» связей Нельзя обращаться к выбираемой сущности в запросе
105 EJB-QL Ограничение количества выборки Два метода класса Query : setFirstResult(int startPos) Нумерация с 0 setMaxResults(int limit)
106 EJB-QL Выполнение запросов Два метода для выборки: List getResultList() Object getSingleResult() EntityNotFoundException NonUniqueResultException Один метод для обновления: int executeUpdate() Возвращает количество измененных записей
107 EJB-QL Массовые операции Обновление Обновляет поле версии (если есть) Удаление Не требует загрузки объектов Массовые изменения не затрагивают управляемых объектов в текущем контексте любого менеджера
108 EJB-QL Именованные запросы Именованные запросы могут определяться в аннотациях Так же могут определяться в конфигурационном файле createNamedQuery(String name)
109 Практика Разработка сохраняемых сложных сущностей с иерархиями наследования и связями. Упражнение 2-109
110 Рассматриваемые темы Java Persistence API Сущности (Entities) Транзакции в JPA Иерархия классов и JPA Связи в JPA EJB-QL Обработчики (Listeners) 2-110
111 Обработчики Обработчики жизненного цикла сущности PrePersist PostPersist PreRemove PostRemove PreUpdate PostUpdate PostLoad Виды обработчиков 2-111
112 Обработчики Вынесение логики обработчиков в отдельный класс и Использование аннотаций обработчиков жизненного цикла в классе сущности Определение обработчиков 2-112
113 Обработчики Предотвращение вызова обработчиков Предотвращение вызова обработчиков по Управление обработчиками 2-113
114 Практика Разработка обработчиков. Упражнение 2-114
115 Рассмотренные темы Java Persistence API Сущности (Entities) Транзакции в JPA Иерархия классов и JPA Связи в JPA EJB-QL Обработчики (Listeners) 2-115
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.