jpa
.pdfОсобенности объединения таблиц
Преимущества
◦Наиболее нормализованные таблицы
◦Нет проблем с ограничениями
(constraints) на столбцах
◦Модель данных легко расширяема
Недостатки
◦Чтение приводит к объединению или
нескольким запросам
◦Вставка и обновление затрагивают
несколько таблиц
2-71
Использование объединения таблиц
Отличный выбор, когда
◦Иерархия не слишком глубока
Необходимые объединения при чтении не приводят к потере производительности
◦Не много обновлений данных
◦Данные распределены по иерархии
Не рекомендуется, если
◦Множество классов в иерархии добавляет лишь поведенческие особенности
2-72
Аннотация @DiscriminatorColumn
Определяет столбец-
дискриминатор
◦При хранении информации о нескольких классах в одной таблице, необходимо средство их
дискриминации
Реализация создает столбец при необходимости
2-73
Стратегия таблицы на класс
Каждый конкретный класс
— в своей таблице
◦Абстрактные классы отображаются на таблицы
наследников
Столбец-дискриминатор
не используется
2-74
Преимущества таблицы на класс
Исправляет недостатки двух предыдущих стратегий
◦Разделяет данные в несколько таблиц
◦Позволяет избежать объединений при операциях с известным типом
Наиболее быстрый вариант при операциях с определенным типом
◦Затрагивается одна таблица
◦Меньше строк и столбцов для получения
2-75
Недостатки таблицы на класс
Значительные ограничения на полиморфные отношения
◦Например:
Получение Set<Person>
em.find(Person.class, id)
◦Приводят к многочисленным запросам или одному запросу с
множеством объединений
2-76
Java Persistence API
Сущности (Entities)
Транзакции в JPA
Иерархия классов и JPA
Связи в JPA
EJB-QL
Обработчики (Listeners)
2-77
Свойства связей
Количество элементов
◦Один-к-одному
◦Один-ко-многим
◦Много-ко-многим
Зависимость
◦Ассоциация
◦Композиция
Направление
◦Однонаправленные
◦Двунаправленные
2-78
Двунаправленные связи
В SQL все связи — двунаправленные
В Java все связи — однонаправленные
Двунаправленные связи в Java моделируются двумя однонаправленными
Две ссылки в памяти моделируют одно значение в реляционной БД
Приложение должно управлять двунаправленными связями в Java
2-79
Каскадирование в JPA
Свойство Cascade
◦Определяет действия менеджера сущностей по отношению к
связанным сущностям
◦CascadeType enum
PERSIST
REMOVE, REFRESH, MERGE, ALL
◦Каскадирование в JPA по умолчанию
отключено
2-80