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