1/70
Карточки-словарь покрывают основные термины и концепции JPA/Hibernate: кэширование, связи, жизненный цикл сущностей, наследование, блокировки, аннотации и т. д. Используйте их для быстрой подготовки к экзамену.
Name | Mastery | Learn | Test | Matching | Spaced |
---|
No study sessions yet.
ORM (Object-Relational Mapping)
Концепция преобразования объектов приложения в строки реляционной БД и обратно.
JPA (Java Persistence API)
Стандартная спецификация ORM для Java; задаёт единый интерфейс управления сущностями, их жизненным циклом и запросами.
Hibernate
Библиотека-провайдер JPA, реализующая ORM-функции и расширяющая их собственными возможностями.
Proxy в Hibernate
Паттерн-заглушка, подменяющая реальный объект для ленивой загрузки
Кэш первого уровня
Сессионный кэш Hibernate; встроен по умолчанию, живёт в пределах Session и исключает дублирующиеся запросы.
Кэш второго уровня
Кэш уровня SessionFactory; общий для всех сессий, требует настройки и стороннего провайдера (Ehcache и др.).
Кэш запросов (Query Cache)
Третий уровень кэширования; сохраняет результаты запросов JPQL/HQL, а не сами сущности.
Ehcache
Популярный провайдер второго уровня кэша для Hibernate.
RegionFactory
Интерфейс-мост между Hibernate и провайдером кэша второго уровня.
Стратегия кэширования Read-Only
Для неизменяемых сущностей; попытка изменить — исключение.
Стратегия Read/Write
Строгая согласованность через «мягкие» блокировки до коммита транзакции.
Стратегия Non-strict Read/Write
Кэш обновляется после коммита; возможны короткие окна устаревших данных.
Стратегия Transactional
Полная сериализация транзакций; наименее производительна, но наиболее безопасна.
Связь One-to-One
Один объект связан ровно с одним другим объектом.
Связь Many-to-One
Многие объекты ссылаются на один объект-родитель.
Связь One-to-Many
Один объект содержит коллекцию многих других объектов.
Связь Many-to-Many
Многие объекты связаны со многими; создаётся промежуточная таблица.
Владелец связи (Owning Side)
Сторона, содержащая внешний ключ и аннотацию @JoinColumn.
AUTO-генерация ключа
Hibernate выбирает стратегию сам; никогда не выберет TABLE, если доступен более быстрый вариант.
N+1 проблема
Один запрос к главной сущности вызывает N дополнительных запросов к связанным сущностям.
Entity Graph
Механизм JPA для указания, какие связи загружать вместе с сущностью, решая проблему N+1.
JOIN FETCH
JPQL-конструкция, объединяющая выборку сущности и связанных данных в одном SQL-запросе.
LockModeType.NONE
Отсутствие блокировки.
LockModeType.OPTIMISTIC
Оптимистическая блокировка; проверка версии при коммите.
LockModeType.OPTIMISTICFORCEINCREMENT
Проверяет версию и всегда её увеличивает.
LockModeType.PESSIMISTIC_READ
Общий READ-лок в БД; читать можно, писать нельзя.
LockModeType.PESSIMISTIC_WRITE
Эксклюзивный лок; ни читать, ни писать нельзя другим транзакциям.
LockModeType.PESSIMISTICFORCEINCREMENT
Как PESSIMISTIC_WRITE плюс инкремент версии.
@IdClass
Аннотация JPA для описания составного ключа отдельным классом.
@EmbeddedId
Встраивание объекта-ключа в сущность для составного PK.
Простая аннотация @Id (без класса ключа)
Допускается Hibernate для нескольких полей, но не JPA.
@Temporal
Для mappинга java.util.Date/Calendar до Java 8 (DATE, TIME, TIMESTAMP).
LocalDate / LocalDateTime
Типы Java 8+, маппятся без @Temporal.
@ElementCollection
Хранит коллекции базовых типов/Embeddable в отдельной таблице без PK.
EnumType.ORDINAL
Сохраняет порядковый номер enum; изменение порядка опасно.
EnumType.STRING
Сохраняет строковое имя enum-константы.
Каскады (CascadeType)
Распространяют операции persist, merge, remove, refresh, detach, all на связанные сущности.
Entity (сущность)
Класс, удовлетворяющий правилам JPA (@Entity, @Id и др.) и отображаемый в таблицу.
Жизненный цикл сущности
Состояния New, Managed, Detached, Removed.
Метод persist()
Переводит New → Managed и вставляет запись при коммите.
Метод merge()
Копирует состояние Detached объекта в Managed копию.
Метод remove()
Помечает Managed объект на удаление.
Метод detach()
Отсоединяет Managed объект, переводя в Detached.
Abstract Entity
Абстрактный класс-сущность; сам не инстанциируется, но может быть в иерархии.
Embeddable класс
@Embeddable; не имеет собственной таблицы, встраивается в сущности.
@Embedded
Поле сущности, в которое встраивается Embeddable объект.
Criteria API
Типобезопасное, объектно-ориентированное построение запросов.
EntityManager
Главный интерфейс JPA для управления сущностями, транзакциями и запросами.
Persistence Context
Контейнер Managed-объектов; бывает транзакционный и расширенный.
JPQL/HQL
Объектно-ориентированные языки запросов; JPQL — подмножество HQL.
Полиморфизм в JPQL
Запрос к базовому типу возвращает объекты всех наследников, если не указан TYPE().
Стратегия SINGLE_TABLE
Одна таблица на всю иерархию наследования + дискриминатор.
Стратегия JOINED
Общие поля — в таблице родителя, уникальные — в таблицах потомков, связанные FK.
Стратегия TABLEPERCLASS
Каждый класс имеет собственную таблицу со всеми полями.
@MappedSuperclass
Базовый класс без таблицы; наследники-энтити получают его поля/аннотации.
@Access
Определяет способ обращения JPA к полям (FIELD) или свойствам (PROPERTY).
@Cacheable
Аннотация JPA: сущность может кэшироваться во 2-м уровне.
@Cache (Hibernate)
Расширение Hibernate для детальной настройки кэша 2-го уровня.
@GeneratedValue.IDENTITY
Поле PK заполняется авто-инкрементом БД.
@GeneratedValue.SEQUENCE
Используется sequence-объект БД.
@GeneratedValue.TABLE
Отдельная таблица-счётчик; самая медленная стратегия.
@OrderBy
Сортирует коллекцию по заданному полю при выборке; порядок в БД не хранится.
@OrderColumn
Создаёт колонку позиции; сохраняет порядок элементов List в БД.
@JoinColumn
Определяет внешний ключ в таблице владельца связи.
@JoinColumns
Набор @JoinColumn для составных FK.
@JoinTable
Создаёт промежуточную таблицу для Many-to-Many или нестандартных связей.
@Basic
Помечает атрибут как базовый тип; можно задать fetch и optional.
@Column
Настраивает имя, длину, nullable и др. свойства столбца.
@Transient
Поле игнорируется ORM и не сохраняется в БД.
JDBC
Низкоуровневый API работы с БД; ручное управление SQL, соединениями и кэшем.
JDBC vs JPA
JDBC даёт полный контроль и скорость, JPA — абстракцию и удобство за счёт ORM-слоя.