Cache de primeiro nível do Hibernate - Sincroniza?
Estou ciente do fato de que<a href="http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/Session.html" rel="nofollow">Session</a>
é o cache de primeiro nível usado porHibernar, e uma vez que recuperamos uma entidade dosession
, o subsequente recebe chamadas para omesma entidade commesmo identificador é obtido a partir dosession
em vez de DB, até que osession
éAbrir.
Dito isto, tenho uma dúvida sobre como o modo de hibernação sincroniza o cache de primeiro nível com o banco de dados? Considere o seguinte cenário
//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
Então minha pergunta é
Desde au3
é obtido do cache de primeiro nível,u3
tem valor atualizado?Se alguém atualiza diretamente o banco de dados e modifica o objeto Usuário quando a sessão está aberta, osession
sincronizar com o banco de dados?Agradecemos antecipadamente pelo seu tempo e esforço neste tópico