Ok, finally I have fixed this bug. The problem was with a default isolation level which was on my local mySQL instance and Cloud SQL set to REPEATABLE-READ. To check these settings I used:
SHOW VARIABLES WHERE Variable_name ='tx_isolation'
so my repeated queries returned the same result because of cashing done on the db level not as I expected on hibernate/spring
To change REPEATABLE-READ to READ COMMITTED I added this to my persistence.xml
<property name="hibernate.connection.isolation">2</property>
Where
1: READ UNCOMMITTED
2: READ COMMITTED
4: REPEATABLE READ
8: SERIALIZABLE
Now everything works fine as it is expected. In the beginning of every new transaction hibernate does
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
The outer transaction sees changes from the inner!