Автор оригинала: Vlad Mihalcea.
Каждая новая глава моей книги выходит сразу после ее завершения, поэтому читателю не нужно ждать, пока вся часть будет закончена, чтобы получить доступ к новому материалу.
В этой главе объясняется внутренняя работа реализации контекста сохранения спящего режима.
13. Flushing 13.1 Flush modes 13.2 Events and the action queue 13.2.1 Flush operation order 13.3 Dirty Checking 13.3.1 The default dirty checking mechanism 13.3.1.1 Controlling the Persistence Context size 13.3.2 Bytecode enhancement
Как объяснено в разделе оптимизация на основе записи, контекст сохранения действует как кэш с обратной записью транзакций. Сеанс гибернации обычно называют кэшем первого уровня, поскольку каждый управляемый объект хранится на Карте, и после загрузки объекта любой последующий запрос обслуживает его из кэша, что позволяет избежать обхода базы данных. Однако, помимо кэширования сущностей, Контекст сохранения действует как буфер перехода состояния сущности.
Как и любой кэш с последующей записью, контекст сохранения требует очистки для синхронизации постоянного состояния в памяти с базовой базой данных. Во время сброса Hibernate может определить, изменился ли управляемый объект с момента его загрузки, и запустить обновление строк таблицы. Этот процесс называется грязной проверкой, и он значительно упрощает операции на уровне доступа к данным.
Однако наличие промежуточного кэша с последующей записью не обходится без проблем, и контекст сохранения может быть подвержен несоответствиям данных. Поскольку эффективность бессмысленна, если эффективность ставится под угрозу, цель этой главы-проанализировать внутреннюю работу механизма промывки, чтобы разработчик приложения знал, как его оптимизировать, не влияя на согласованность данных.