It seems that this Hibernate property is only a hint to Hibernate. See here and in Hibernate ORM Docs, where they say
Except when you explicitly flush(), there are absolutely no guarantees about when the Session executes the JDBC calls, only the order in which they are executed.
More to this, the FlushMode.ALWAYS enum value Javadoc states that
The Session is flushed before every query. This is almost always unnecessary and inefficient.
I'm not sure if by "query" they mean only a database interrogation (reads) or any kind of operation, including inserts, updates and deletes.
If I were you, I would explicitly place a session.flush()
call after the first update. I know that declarative way is cleaner, but sometimes imperative programming makes your business safer.