Что произойдёт при двух вызовах findById с одним ID в рамках одной Hibernate-сессии (кэш первого уровня)?

При двух вызовах findById с одним и тем же ID в рамках одной Hibernate-сессии будет использован кэш первого уровня (Session Cache).

Короткий ответ

Что ответить на собеседовании

При двух вызовах findById с одним и тем же ID в рамках одной Hibernate-сессии будет использован кэш первого уровня (Session Cache).

Подробный разбор

Ответ с пояснениями

Условие

Что произойдёт при двух вызовах findById с одним ID в рамках одной Hibernate-сессии (кэш первого уровня)?

Ответ

При двух вызовах findById с одним и тем же ID в рамках одной Hibernate-сессии будет использован кэш первого уровня (Session Cache).

Первый вызов загрузит объект из базы данных и поместит его в кэш сессии. При втором вызове Hibernate не будет делать дополнительный запрос к базе, а вернёт объект из кэша.

Это позволяет повысить производительность, избегая повторных запросов к БД в рамках одной сессии и обеспечивая целостность данных (один и тот же объект в памяти).

Пример:

Session session = sessionFactory.openSession();
MyEntity entity1 = session.find(MyEntity.class, id); // запрос к БД
MyEntity entity2 = session.find(MyEntity.class, id); // из кэша, без запроса
session.close();

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее