Hello,
can somebody explain , what the philosophy of following behaviour is?
1. Open a session s1, load an entity e
2. Open a 2nd session, update e, commit transaction
3. Query in s1 find entity e with old values?? Only refresh updates values.
This is only for updates, creates and deletes are immediatly visible in session 1 at step 3.
EDIT: Strange for me is that the query in step 3 send a select to database. Updates values are there (coz of commit) but entity values in session 1 are not updated.
SampleCode: Assertion Failed:
Code:
// Create Object in session 1
Session createObjectSession = sessionFactory.openSession();
createObjectSession.beginTransaction();
Event originalEvent = new Event("Our very first event!", new Date());
createObjectSession.save( originalEvent );
Long id = originalEvent.getId();
createObjectSession.getTransaction().commit();
//Update object in session2
Session updateObjectSession = sessionFactory.openSession();
updateObjectSession.beginTransaction();
Event updatedEvent = (Event)updateObjectSession.load(Event.class, id);
updatedEvent.setTitle("Our very first event! Changed!!!");
updateObjectSession.saveOrUpdate(updatedEvent);
updateObjectSession.getTransaction().commit();
// Reread object in session 1
createObjectSession.beginTransaction();
Event refreshedEvent=(Event)createObjectSession.createQuery("from Event").uniqueResult();
String titleRefreshedFromOriginal = refreshedEvent.getTitle();
String titleUpdate = updatedEvent.getTitle();
createObjectSession.getTransaction().commit();
logger.info(titleRefreshedFromOriginal+"/"+titleUpdate);
// Compare
assertEquals(titleRefreshedFromOriginal,titleUpdate);
createObjectSession.close();
updateObjectSession.close();