Когда запрос попадает в кэш 1-го уровня JPA, а когда запрос обходит кеш - PullRequest
0 голосов
/ 29 октября 2018

Очевидно, что по умолчанию, когда мы выполняем entityManager.find(Post.class, 1L);, тогда экземпляр Post для id=1 будет извлечен и помещен в кэш 1-го уровня, а затем, если мы снова выполним тот же entityManager.find(Post.class, 1L); в том же транзакции, экземпляр post будет возвращен непосредственно из кэша 1-го уровня без запроса к базе данных.

У меня следующий вопрос:

Проверяется ли кэш 1-го уровня только тогда, когда мы пытаемся получить сущность по id выполняет entityManager.find(...); метод? Я имею в виду, что если мы получим один и тот же экземпляр Post (имеющий id = 1) другим свойством, отличным от идентификатора, например используя критерий запроса выборки поста по имени? Будет ли проверяться кэш 1-го уровня?

А как насчет запроса той же строки по native query, jpql или spring data query method? JPA / Hibernate анализирует native query и jpql запросы, чтобы выяснить, есть ли соответствующая сущность в кеше 1-го уровня?

...