Что верно про persistence context (сессию) в JPA?
- Что такое кэш первого уровня в Hibernate?
- Какие состояния бывают у сущности JPA?
Persistence context — кэш первого уровня и единица работы: одна сущность в одном экземпляре на сессию, изменения отслеживаются автоматически (dirty checking) и сбрасываются при flush.
- Состояния: transient, managed, detached, removed
- Изменили поле managed-сущности — UPDATE уйдёт при flush без явного save
- Сессия не потокобезопасна и живёт в пределах транзакции
А ещё Большие пакетные операции раздувают контекст — нужен flush и clear
Подробно
Сессия хранит снимок загруженных сущностей и при flush сравнивает его с текущим состоянием, генерируя UPDATE только для реально изменённых — отсюда и работает изменение объекта без явного вызова save. Гарантия тождества внутри сессии тоже полезна: два поиска по одному идентификатору вернут один и тот же объект. Обратная сторона — размер: загрузив в одну транзакцию сотни тысяч сущностей, вы получите и память под снимки, и дорогой flush, поэтому при пакетной обработке сессию периодически очищают. Сессия не потокобезопасна и живёт в пределах одного потока и, как правило, одной транзакции.
Что хотят услышать
- Кэш первого уровня и идентичность сущностей.
- Dirty checking и flush.
- Четыре состояния сущности.
Частые ошибки
- Загружать в одну транзакцию огромные объёмы сущностей.
- Считать, что для сохранения изменений обязательно нужен явный вызов метода репозитория.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Это кэш первого уровня: повторный find по id в той же сессии не идёт в базу
- ✗Persistence context общий для всех потоков приложения и живёт всё время его работы
- ✓Изменения управляемых сущностей уходят в базу при flush без вызова save
- ✓Сущность бывает transient, managed, detached или removed
Что спросят дальше
- Чем кэш первого уровня отличается от кэша второго уровня?
- Когда происходит flush, если его не вызывать явно?
Разбор темы
- ORM, persistence context и N+1
Что делает ORM, lazy/eager и proxy, механизм N+1, способы лечения и типичные грабли.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.