Hibernate первый уровень кеширования - PullRequest
0 голосов
/ 12 апреля 2011

Я хочу знать, как загрузить и получить работает с кэшированием первого уровня.

Если у меня есть запрос на выборку в том же сеансе с первым извлечением с использованием getmethod, а затем с использованием метода загрузки.Будет ли второй метод загрузки использовать кеш запросов или создаст новый запрос при поиске свойств?

Ответы [ 4 ]

3 голосов
/ 12 апреля 2011

Кэш используется в основном, когда:

  • звонит session.get
  • звонит session.load
  • при (ленивой) загрузке отношений «многие к одному» и «один к одному»

Если попадания нет, get выполняет запрос, load создает прокси.

При выполнении любого вида запроса (HQL, критерии) запрос переводится в SQL и выполняется в базе данных. Если полученные объекты будут найдены в кеше, запрос вернет их.

0 голосов
/ 30 января 2017

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

http://webiwip.com/interview-questions-answers/hibernate-interview-questions/32011

0 голосов
/ 06 апреля 2015

Кэширование первого уровня включено по умолчанию, и нам ничего не нужно делать для его достижения, фактически мы не можем даже отключить его оттуда.Кэширование первого уровня также называется Session Level Caching, что означает, что оно работает только для сеанса, в случае, если один и тот же запрос выполняется два или более раз за один сеанс, он получает данные из БД только для самого первого запроса и обслуживает те же данныеиз кэша для всех последующих аналогичных запросов.

Подробнее: http://www.beingjavaguys.com/2014/11/how-first-level-caching-works-in.html

0 голосов
/ 05 сентября 2013

Я новичок в спящем режиме.Таким образом, чтобы понять стратегии кэширования в спящем режиме, я установил точку прерывания строки при получении и следовал за стеком вызовов.

В файле StatefulPersistanceContext.java есть несколько карт, например, entityByKey, который действует как кэш уровня сеанса.Когда вы вызываете get () , он сначала проверяет кэш уровня сеанса, если он пропускает, затем проверяет кэш 2-го уровня (если он установлен для использования для этого объекта), в противном случае он возвращается к базе данных.См. doLoad () функция и вызовы loadFromSessionCache () , loadFromSecondLevelCache () и loadFromDatasource () в файле DefaultLoadEventListners.java.

Как только он извлекает строки из базы данных, он также заполняет кэш уровня сеанса.Таким образом, ваши последующие вызовы get () будут разрешены из самого кэша уровня сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...