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

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

Мой вопрос заключается в следующем:

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

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

0 ответов

Другие вопросы по тегам