Вопрос с собеседования · Базы данных

Что верно про persistence context (сессию) в JPA?

MiddleORM и N+1Hibernate / 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, если его не вызывать явно?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования