Кэширование гибернации второго уровня - Сделать объект доступным на уровне фабрики сеансов? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть некоторое понимание того, как этот уровень кэширования первого и второго уровня используется в спящем режиме.Есть много вопросов, связанных с этим - да, я согласен

Но мое замешательство заключается в том.В кэшировании первого уровня, до тех пор, пока я не зафиксирую транзакцию, мои данные не будут сохранены в БД, поэтому другие сессии не узнают об этих изменениях до этого.Если кэширование второго уровня приводит сущности к уровню фабрики сессий! Означает ли это, что мои изменения в одном сеансе могут быть использованы другими сеансами еще до того, как я совершу транзакцию?

И когда произойдет обновление в дБ при использовании кэширования второго уровня?? в 1-ом это произойдет при завершении транзакции

Я отослал много обсуждений в этой теме и не нашел точных ответов !!

1 Ответ

1 голос
/ 15 мая 2019

Ваши обновления определенно не передаются другим сеансам, пока вы не совершите транзакцию. Если что-то подобное происходит, это серьезная ошибка.

Нет никакой разницы в фиксации БД с или без 2LC, кроме того факта, что 2LC может завершить транзакцию до того, как БД будет полностью зафиксирован. Как JPA, так и транзакции Hibernate, отличные от JPA, выполняют двухфазную фиксацию, когда все ресурсы сначала уведомляются о том, что транзакция фиксируется, получают некоторые блокировки и т. Д., И, если все ресурсы успешны, изменения сохраняются / публикуются.

Транзакционный кеш не слишком отличается от обычной БД: он делает вид, что изменения уже применены, но скрывает их от других транзакций; это называется многоверсионным параллельным управлением (MVCC).

...