Pamięć podręczna pierwszego poziomu Hibernate - czy synchronizuje?
Jestem świadomy tego, że<a href="http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/Session.html" rel="nofollow">Session</a>
to pamięć podręczna pierwszego poziomu używana przezHibernowaći po odzyskaniu istoty zsession
, kolejne wywołania dlaten sam podmiot zten sam identyfikator jest pobierany zsession
zamiast DB, aż dosession
jestotwarty.
Powiedziawszy to, mam wątpliwości, jak hibernacja synchronizuje pamięć podręczną pierwszego poziomu z DB? Rozważmy następujący scenariusz
//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
Więc moje pytanie jest
Odu3
jest pobierany z pamięci podręcznej pierwszego poziomuu3
masz zaktualizowaną wartość?Jeśli ktoś bezpośrednio aktualizuje DB i modyfikuje obiekt użytkownika, gdy sesja jest otwarta, robisession
synchronizować z DB?Z góry dziękuję za poświęcony czas i wysiłek na ten wątek