i also had the same problem: After i updated an entity to new value in SESSION1 and i fetched the same entity afterwards in SESSION2, i got old values. I even checked in my DB after closing SESSION1 that new values are present in my db.
There was one not-nice workaround: when I wanted to read updated data, i opend and commited a transation: session.beginTransaction().commit();
However, in my case the problem was in INNODB settings for mysql database. The default isolation level for INNODB is REPEATABLE READ -- I found it here hibernate forum. The solution is in changing the global transaction isolation level to READ_COMMITTED (2) or SERIALIZABLE (8). Check the java.sql.Connection for these isolation levels.
Put the following in your config.hbm.xml
all the best
PS: do not forget do flush() before closing the session ;-)