Hibernar caché de primer nivel - ¿Se sincroniza?
Soy consciente del hecho de que<a href="http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/Session.html" rel="nofollow">Session</a>
es caché de primer nivel utilizado porHibernar, y una vez que recuperemos una entidad de lasession
, las subsiguientes llamadas para elmisma entidad conmismo identificador se obtiene de lasession
en lugar de DB, hasta quesession
esAbierto.
Dicho esto, tengo una duda sobre cómo hibernar sincroniza el caché de primer nivel con DB. Considere el siguiente escenario
//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
Así que mi pregunta es
Ya queu3
se obtiene de la caché de primer nivel, haceu3
tener valor actualizado?Si alguien actualiza directamente la base de datos y modifica el objeto Usuario cuando la sesión está abierta,session
sincronizar con DB?Gracias de antemano por su tiempo y esfuerzo en este hilo