Мне известно, что Session
– это кеш первого уровня, используемый Hibernate, и как только мы извлекаем объект из session
, последующие вызовы get для того же объекта с < em>тот же идентификатор извлекается из session
вместо БД, пока session
не станет открытым.
Сказав это, у меня есть сомнения относительно того, как спящий режим синхронизирует кеш первого уровня с БД? Рассмотрим следующий сценарий
//Lets say I have created the session
Session s1 = sessionFactory.getSession();
User u1 = s1.get(User.class, 1); //Getting User with ID=1
//s1 is not yet closed
//Lets say I create some other session
Session s2 = sessionFactory.getSession();
User u2 = s2.get(User.class, 1); //Getting User with ID=1
u2.setName("Abc"); // Changed a field
s2.save(u2); // Saved the changes to DB
s2.close(); //Closed the 2nd session
//Now when I once again retrieve User with ID=1 from s1, will I get updated User?
User u3 = s1.get(User.class, 1);// Here as per my understanding cache is used
Итак, мой вопрос
- Поскольку
u3
извлекается из кеша 1-го уровня, имеет лиu3
обновленное значение? - Если кто-то напрямую обновляет БД и изменяет объект пользователя, когда сеанс открыт, синхронизируется ли
session
с БД?
Заранее спасибо за ваше время и усилия в этой теме