Когда запрос попадает в кэш 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-го уровня?